美文网首页
COpaguePointer 和 C converntion

COpaguePointer 和 C converntion

作者: fordring2008 | 来源:发表于2017-02-04 10:23 被阅读12次

    // 在 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

    }

    相关文章

      网友评论

          本文标题:COpaguePointer 和 C converntion

          本文链接:https://www.haomeiwen.com/subject/cpyjittx.html