swift里 as、as!、as?區(qū)別

總結(jié) as、as!、as? 這三種類型轉(zhuǎn)換操作符的異同,以及各自的使用場景。

1,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 = 42 as Int

let num3 = 42.5 as Int

let num4 = (42 / 2) as Double

(3)switch 語句中進(jìn)行模式匹配

如果不知道一個對象是什么類型,你可以通過switch語法檢測它的類型,并且嘗試在不同的情況下使用對應(yīng)的類型進(jìn)行相應(yīng)的處理。

switch animal {

case let cat as Cat:

print("如果是Cat類型對象,則做相應(yīng)處理")

case let dog as Dog:

print("如果是Dog類型對象,則做相應(yīng)處理")

default: break

}

2,as!使用場合

向下轉(zhuǎn)型(Downcasting)時使用。由于是強制類型轉(zhuǎn)換,如果轉(zhuǎn)換失敗會報 runtime 運行錯誤。

class Animal {}

class Cat: Animal {}

let animal :Animal? = Cat()

let cat = animal as! Cat

3,as?使用場合

as? 和 as! 操作符的轉(zhuǎn)換規(guī)則完全一樣。但 as? 如果轉(zhuǎn)換不成功的時候便會返回一個 nil 對象。成功的話返回可選類型值(optional),需要我們拆包使用。

由于 as? 在轉(zhuǎn)換失敗的時候也不會出現(xiàn)錯誤,所以對于如果能確保100%會成功的轉(zhuǎn)換則可使用 as!,否則使用 as?

let animal:Animal = Cat()

if let cat = animal as? Cat{

print("cat is not nil")

} else {

print("cat is nil")

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容