- 类型转换可以判断实例的类型,也可以将实例看做是其父类或者子类的实例。也可用来检查某个类型是否实现了某个协议。
类型转换在 Swift 中使用 is 和 as 操作符实现。
向下转型
某类型的一个常量或变量可能在幕后实际上属于一个子类。当确定是这种情况时,你可以尝试向下转到它的子类型,用类型转换操作符(as? 或 as!)。
因为向下转型可能会失败,类型转型操作符带有两种不同形式。条件形式 as? 返回一个你试图向下转成的类型的可选值。强制形式 as! 把试图向下转型和强制解包转换结果结合为一个操作。
转换没有真的改变实例或它的值。根本的实例保持不变;只是简单地把它作为它被转换成的类型来使用。
Any和AnyObject类型转换
Swift 为不确定类型提供了两种特殊的类型别名:
- Any可以表示任何类型,包括函数类型
- AnyObject可以表示任何类类型的实例
Any 类型可以表示所有类型的值,包括可选类型。Swift 会在你用 Any 类型来表示一个可选值的时候,给你一个警告。如果你确实想使用 Any 类型来承载可选值,你可以使用 as 操作符显式转换为 Any。
let optionalNumber: Int? = 3
things.append(optionalNumber) // 警告
things.append(optionalNumber as Any) // 没有警告