由于swift是强类型语言,所以对类型的转换有严格的限制,以至于基本的标量转换都不允许隐式转换,如果需要转换,那就需要类型的构造函数来处理。swift为我们提供了unsafeBitCast函数,可以将一个指针的内存强制按位转换为目标的类型,这就相当于绕过了swift的类型管理机制,但是编译器无法确保得到的类型是否正确,所以需要开发者确保类型的正确性
如图2代码所示,我们定义两个结构体,各有一个静态bool常量。在这种情况下转换是没有问题的。但是如果我们在结构体B中再添加一个Int类型的变量z,则会报运行时错误,如图3代码所示
所以unsafeBitCast操作是非常危险的,swift官方文档也给出明确的警告!!
网友评论