COpaguePointer 和 C converntion

// 在 C 中有一类指针,你在头文件中无法找到具体的定义,只能拿到类型的名字,而所有的实现细节都是隐藏的。这类指针在 C 或者 C++中被叫做不透明指针(Opaque Pointer),它的实现和表一对使用者来说是不透明的。

// 在 Swift 中这类指针的类型是 COpaguePointer,它用来表示那些在 Swift中无法进行类型描述的 C 指针// 那些能够确定类型的指针所表示的是指向的内存是可以用某个 Swift 中的类型来描述的,因此都使用更加准确的 UnsafePoint来存储。而对于另外那些 Swift 无法描述的指针,就统一写成 COpaquePointer ,以作补充。随着 Swift 的逐渐完善,这个类型的已经越来越少了

// COpaquePointer 在 Swift 中扮演的是指针转换的中间人的角色。不安全,不建议使用】

// 另一种重要的指针形式是指向函数的指针,即一块存储了某个函数实际所在位置的内存空间。从Swift 2.0 开始,这类指针可以转化为闭包,不过与其他普通闭包不同,我们需要为它添加上 @convertion 标注 例如 C 中的一个函数

/*

int cFunction(int (callBack)(int x, int y)){

return callback(1, 2);

}

*/

// 在Swift 中调用

let callback :(Int32, Int32) -> Int32 = {

(x, y) -> Int32 in

return x + y

}

let result = cFounction(callback)

print(result)  //  输出3

// 在没有歧义的情况, 甚至可以省掉这个标注, 值直接将它以一个 Swift 闭包的形式传递给C

let result1 = cFounction{

(x, y) -> Int32 in

return x + y

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容