【发布时间】:2016-04-10 01:22:51
【问题描述】:
动机是尝试使用带有 C API 的回调,在其中我通过 void 指针传递我想要的任何内容。
假设我有一个x: UnsafePointer<Void>。我知道它真正是什么,所以我想适当地转换指针。使用 unsafeBitCast 或仅将 UnsafePointer 应用于 x 有什么区别?换句话说
是
let y = unsafeBitCast(x, to: UnsafePointer<MyStruct>.self)
不同于
let z = UnsafePointer<MyStruct>(x)
以某种方式?
【问题讨论】:
-
为了使用 C API,最好将 C API 包装在一个非常薄的 Swift 层中,在其中执行从 void 指针到 Swift 值的不安全映射。然后,您的其余代码将通过您的 Swift 代码,并且您的代码库中不会出现这种非常不稳定的代码——它们都被收集到一组包装器代码中。
标签: swift pointers void-pointers