7. func的参数修饰 inout. unsafePoint
2018-08-29 本文已影响72人
aofeilin
引用类型:声明一个swift 方法的时候,inout 引用类型。
[https://www.cnblogs.com/wj033/p/4510868.html](https://www.cnblogs.com/wj033/p/451086
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