as,as!和as?關(guān)鍵字的用法
- as
(1).由派生類轉(zhuǎn)換為基類. 向上轉(zhuǎn)型 (upcasts)
class Animal{}
class Cat : Animal{}
let cat = Cat()
let animal = cat as Animal
(2). 消除二義性.數(shù)值類型的轉(zhuǎn)換
let num1 = 42 as CGFloat
let num2 = 43 as Int
let num3 = (42.1 / 2) as Double
(3). switch 語句中進行模式匹配. 如果不知道一個對象是什么類型,你可以通過switch語法檢測它的類型晰奖,并且嘗試在不同的情況下使用對應(yīng)的類型進行相應(yīng)的處理挟冠。
class Animal{} // 聲明一個Animal的對象
class Cat : Animal{} // 聲明一個繼承Animal的Cat的對象
class Dog : Animal{} // 聲明一個繼承Animal的Dog的對象
let cat = Cat()
let animal = cat as Animal
switch animal {
case let cat as Cat:
print("如果是Cat類型對象,則做相應(yīng)處理")
case let dog as Dog:
print("如果是Dog類型對象室谚,則做相應(yīng)處理")
default:
break
}
- as!
向下轉(zhuǎn)型(Downcasting)時使用。由于是強制類型轉(zhuǎn)換,如果轉(zhuǎn)換失敗會報 runtime 運行錯誤
class Human{}
class Man : Human{}
class Women : Human{}
let human : Human = Man()
let man = human as! Man
- as?
as? 和 as! 操作符的轉(zhuǎn)換規(guī)則完全一樣古沥。但 as? 如果轉(zhuǎn)換不成功的時候便會返回一個 nil 對象瘸右。成功的話返回可選類型值(optional),需要我們拆包使用岩齿。
由于 as? 在轉(zhuǎn)換失敗的時候也不會出現(xiàn)錯誤太颤,所以對于如果能確保100%會成功的轉(zhuǎn)換則可使用 as!,否則使用 as?