- 題記
The as! Operator!
讓我們來操作as吧!
- 說明
因為最近在學(xué)習(xí)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
理解:字面理解就是有強(qiáng)項轉(zhuǎn)換,即向下轉(zhuǎn)型校仑,子類(派生類)向父類轉(zhuǎn)換忠售,官方解釋說這是一個不被保證的轉(zhuǎn)換,可能會因為強(qiáng)轉(zhuǎn)的失敗而會導(dǎo)致崩潰迄沫。同時 ****稻扬!****是一個陷阱的標(biāo)志,就像??一樣羊瘩,用起來存在一定危險性
著名代碼:
// 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!能強(qiáng)行將a轉(zhuǎn)成Dog -> Bingo
-
as?
keyword:*** Optional尘吗、 Nil***
理解:Swfit代碼寫一段時間后會發(fā)現(xiàn)到處都是 逝她? ,這預(yù)示著如果轉(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 // 強(qiáng)行調(diào)用臀晃,報錯
let animal: Animal = Cat()
animal as? Dog // 貓轉(zhuǎn)狗失敗,返回nil
animal as! Dog // 貓強(qiáng)行轉(zhuǎn)狗介劫,失敗報錯
- 引用參考
- 蘋果官方文檔