as、as?、as!三者之间的区别
2021-09-10 本文已影响0人
EngineerPan
as、as?、as!三者之间的区别
class Dog: Canidae {
let name = "Jim"
}
class Canidae: Animat {
let kind = "Dog"
}
class Animat {
let subject = "Canidae"
}
- as 的作用:
- 类型声明
// 声明 num3 的类型为 CGFloat let num3 = num as CGFloat
- 向上转换为父类类型
// 实例化子类 let dog = Dog() // 将子类向上转换为父类类型 Canidae let canidae = dog as Canidae // 将子类向上转换为父类的父类类型 Animat let animat = dog as Animat
- as? 的作用
- 向下转换为子类的可选类型
// 实例化父类 let animat = Animat() // 将父类向下转换为子类的可选类型,重点要注意是转换为了子类型的可选类型,需要处理值为 nil 的情况 let canidae: Canidae? = animat as? Canidae let dog: Dog? = animat as? Dog
- as! 的作用
- 向下转换为子类类型
// 实例化父类 let animat = Animat() // 将父类向下转换为子类类型,和 as?的区别就是 as!转换后的类型不是可选类型 let canidae: Canidae = animat as! Canidae let dog: Dog = animat as! Dog