Swift中的指针
2019-07-02 本文已影响0人
盖小聂
1、UnsafePointer
- Swift本身从设计上来说是一门非常安全的语言,在Swift的思想中,所有的引用或者变量的类型都是确定并且正确对应它们的实际类型的,你应该无法进行任意的类型转化,也不能直接通过指针做出一些出格的事情。这种安全性在日常的程序开发中对于避免不必要的bug,以及迅速而且稳定的找出代码错误是非常有帮助的。但是凡事都有两面性,在高安全的同时,Swfit也相应的丧失了部分的灵活性。UnsafePointer就是Swift中专门针对指针的转换。
- 对于其他的C中基础类型,在Swift中对应的类型都遵循统一的命名规则:在前面加上一个字母C并将原来的第一个字母大写:比如int,bool和char的对应类型分别是CInt,CBool和CChar。
C API const Type *对应Swift API中的UnsafePointer
C API Type *对应Swift API中的UnsafeMutablePointer - 在C中,对某个指针进行取值使用的是*,而在Swift中我们可以使用memory属性来读取相应内存中存储的内容。
- 通过传入指针地址进行方法调用的时候就都比较相似了,都是在前面加上&符号。
- Swift中为我们提供了一个强制转换的方法unsafeBitCast。unsafeBitCast会将第一个参数的内容按照第二个参数的类型进行转换,而不去关心实际是不是可行,这也正是UnsafePointer的不安全所在,因为我们不必遵守类型转换的检查,而拥有了在指针层面直接操作内存的机会。