// 在 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
}
网友评论