ios – Xcode 10 Swift构建错误:“将非转义值转换为’T’可能允许它逃脱”

ios – Xcode 10 Swift构建错误:“将非转义值转换为’T’可能允许它逃脱”,第1张

概述我正在使用 Swift-VectorBoolean库,它目前在Swift 3.2上,尚未针对Swift 4.2进行更新,但仍应在Xcode 10上运行.在Xcode 9上运行它,它运行正常.在Xcode 10上,它给出了一个我不确定如何解决的错误.这是有问题的功能: typealias MyPathApplier = @convention(block) (UnsafePointer<CGPath 我正在使用 Swift-VectorBoolean库,它目前在Swift 3.2上,尚未针对Swift 4.2进行更新,但仍应在Xcode 10上运行.在Xcode 9上运行它,它运行正常.在Xcode 10上,它给出了一个我不确定如何解决的错误.这是有问题的功能:
typealias MyPathApplIEr = @convention(block) (UnsafePointer<CGpathelement>) -> VoID// Note: You must declare MyPathApplIEr as @convention(block),because// if you don't,you get "Fatal error: can't unsafeBitCast between// types of different sizes" at runtime,on Mac OS X at least.private func myPathApply(_ path: CGPath!,block: MyPathApplIEr) {  let callback: @convention(c) (UnsafeMutableRawPointer,UnsafePointer<CGpathelement>) -> VoID = { (info,element) in    let block = unsafeBitCast(info,to: MyPathApplIEr.self)    block(element)  }  path.apply(info: unsafeBitCast(block,to: UnsafeMutableRawPointer.self),function: unsafeBitCast(callback,to: CGPathApplIErFunction.self))}

错误发生在最后一行,path.apply,突出显示第一个unsafeBitCast:

将非转义值转换为“T”可能允许它转义

我不知道如何修改此代码以删除错误,或者如果这是Xcode 10的问题.它应该能够编译Xcode 3.2代码..甚至将代码库更新为Xcode 9中的Swift 4,它仍然有同样的问题.

编辑:用@Vyacheslav的答案改变它允许它编译,但它得到一个运行时错误:
“致命错误:不能在不同大小的类型之间使用unsafeBitCast”

上面的示例中提供了一条评论,我没有在上面的示例中包含:

// Note: You must declare MyPathApplIEr as @convention(block),on Mac OS X at least.

我仍然不明白需要在这里改变什么以确保它构建,我们也没有得到运行时错误.

解决方法 使用
private func myPathApply(_ path:CGPath !,block:@escaPing @convention(block)(UnsafePointer< CGpathelement>) – > VoID){

@noescape现在默认为

总结

以上是内存溢出为你收集整理的ios – Xcode 10 Swift构建错误:“将非转义值转换为’T’可能允许它逃脱”全部内容,希望文章能够帮你解决ios – Xcode 10 Swift构建错误:“将非转义值转换为’T’可能允许它逃脱”所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1114295.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存