- 題記
The as! Operator!
讓我們來操作as吧!
- 說明
因為最近在學習Swift,這里根據(jù)蘋果官方文檔加上自己的理解,總結(jié)了下常用的as、as!、as? 這三種類型轉(zhuǎn)換操作符的異同和使用方式。
- 正文
-
as
keyword:Guaranteed conversion、 Upcasting
理解:字面理解就是有保證的轉(zhuǎn)換,從派生類轉(zhuǎn)換為基類的向上轉(zhuǎn)型
著名代碼:
// 將1轉(zhuǎn)成float
let num = 1 as CGFloat
|------------------------
// dog轉(zhuǎn)換到父類animal
class Animal {}
class Dog: Animal {}
let d = Dog()
d as Animal
-
as!
keyword:Forced conversion、 Downcasting
理解:字面理解就是有強項轉(zhuǎn)換,即向下轉(zhuǎn)型,子類(派生類)向父類轉(zhuǎn)換,官方解釋說這是一個不被保證的轉(zhuǎn)換,可能會因為強轉(zhuǎn)的失敗而會導致崩潰。同時 ****!****是一個陷阱的標志,就像??一樣,用起來存在一定危險性
著名代碼:
// Dog到Animal的轉(zhuǎn)化
class Animal {}
class Dog: Animal {}
let a: Animal = Dog()
a as Dog // as不能將a轉(zhuǎn)成Dog,即不能向下轉(zhuǎn)換
a as! Dog // as!能強行將a轉(zhuǎn)成Dog -> Bingo
-
as?
keyword:*** Optional、 Nil***
理解:Swfit代碼寫一段時間后會發(fā)現(xiàn)到處都是 ? ,這預示著如果轉(zhuǎn)換不成功的時候便會返回一個 nil 對象。成功的話返回可選類型值(optional)。
著名代碼:
// Dog、Cat和Animal的轉(zhuǎn)換關(guān)系
class Animal {}
class Cat: Animal {}
class Dog: Animal {
var name = "Spot"
}
let dog: Dog? = nil
dog?.name // 選擇調(diào)用,返回空值nil
dog!.name // 強行調(diào)用,報錯
let animal: Animal = Cat()
animal as? Dog // 貓轉(zhuǎn)狗失敗,返回nil
animal as! Dog // 貓強行轉(zhuǎn)狗,失敗報錯
- 引用參考
- 蘋果官方文檔