as、as?、as!三者之間的區(qū)別
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- 向上轉(zhuǎn)換為父類類型
// 實(shí)例化子類 let dog = Dog() // 將子類向上轉(zhuǎn)換為父類類型 Canidae let canidae = dog as Canidae // 將子類向上轉(zhuǎn)換為父類的父類類型 Animat let animat = dog as Animat - as? 的作用
- 向下轉(zhuǎn)換為子類的可選類型
// 實(shí)例化父類 let animat = Animat() // 將父類向下轉(zhuǎn)換為子類的可選類型,重點(diǎn)要注意是轉(zhuǎn)換為了子類型的可選類型,需要處理值為 nil 的情況 let canidae: Canidae? = animat as? Canidae let dog: Dog? = animat as? Dog - as! 的作用
- 向下轉(zhuǎn)換為子類類型
// 實(shí)例化父類 let animat = Animat() // 將父類向下轉(zhuǎn)換為子類類型,和 as?的區(qū)別就是 as!轉(zhuǎn)換后的類型不是可選類型 let canidae: Canidae = animat as! Canidae let dog: Dog = animat as! Dog