Ios Xcode 10 Swift生成错误:“0”;将非转义值转换为';T';可能会让它逃走”;

Ios Xcode 10 Swift生成错误:“0”;将非转义值转换为';T';可能会让它逃走”;,ios,swift,xcode,unsafe-pointers,Ios,Swift,Xcode,Unsafe Pointers,我使用的是Swift VectorBoolean库,它目前在Swift 3.2上,尚未更新为Swift 4.2,但应该仍然适用于Xcode 10。在Xcode 9上运行这个程序,效果很好。在Xcode 10上,它给出了一个我不确定如何修复的错误。这就是所讨论的功能: typealias MyPathApplier = @convention(block) (UnsafePointer<CGPathElement>) -> Void // Note: You must decla

我使用的是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))
}
我仍然不明白这里需要更改什么以确保它的构建,而且我们也没有遇到运行时错误。

使用

private func myPathApply(_ path: CGPath!, 
    block: @escaping @convention(block) (UnsafePointer<CGPathElement>) -> Void) {

}
private func mypathpapply(upath:CGPath!,
块:@escaping@convention(块)(UnsafePointer)->Void){
}

@noescape
现在默认为

这允许它进行编译,但现在我面临一个运行时错误。为问题增加了细节。
private func myPathApply(_ path: CGPath!, 
    block: @escaping @convention(block) (UnsafePointer<CGPathElement>) -> Void) {

}