美文网首页
7. func的参数修饰 inout. unsafePoint

7. func的参数修饰 inout. unsafePoint

作者: aofeilin | 来源:发表于2018-08-29 19:21 被阅读72次

    引用类型:声明一个swift 方法的时候,inout 引用类型。
    [https://www.cnblogs.com/wj033/p/4510868.html](https://www.cnblogs.com/wj033/p/451086

    040781D1-3F04-45FE-AD9E-15E0BBFDCE4C.png
    8.html)
    两者都可以获取地址,inout 只能用在参数传递里面,unsafePointer 一个是struct 一个运算符
    6A727BB5-1D75-4A2E-9E86-7FCE75F992DF.png
    SWIFT 中 指针被映射为泛型
    UnsafePointer<T> UnsafeMutablePointer<T>
    E1F225FF-A1F8-4C18-856E-FB9444111265.png
    DF792E40-4ACA-4AF5-8181-CFDB576DBDD6.png
    89AAC276-6FFC-4BB8-856A-71F448E31FC8.png
    unsafeBitCast:unsafeBitCast 是非常危险的操作,它会将一个指针指向的内存强制按位转换为目标的类型。因为这种转换是在 Swift 的类型管理之外进行的,因此编译器无法确保得到的类型是否确实正确,你必须明确地知道你在做什么。

    因为 NSArray 是可以存放任意 NSObject 对象的,当我们在使用 CFArrayGetValueAtIndex 从中取值的时候,得到的结果将是一个 UnsafePointer<Void>。由于我们很明白其中存放的是 String 对象,因此可以直接将其强制转换为 CFString。
    关于 unsafeBitCast 一种更常见的使用场景是不同类型的指针之间进行转换。因为指针本身所占用的的大小是一定的,所以指针的类型进行转换是不会出什么致命问题的。这在与一些 C API 协作时会很常见。比如有很多 C API 要求的输入是 void *,对应到 Swift 中为 UnsafePointer<Void>。我们可以通过下面这样的方式将任意指针转换为 UnsafePointer。


    78F994C9-D47D-4698-831E-69216B9BF7A5.png

    相关文章

      网友评论

          本文标题:7. func的参数修饰 inout. unsafePoint

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