Swift as、as!、as? 關(guān)鍵字 三種操作符的使用

  • 題記
The as! Operator!

讓我們來操作as吧!

  • 說明
因為最近在學習Swift,這里根據(jù)蘋果官方文檔加上自己的理解,總結(jié)了下常用的as、as!、as? 這三種類型轉(zhuǎn)換操作符的異同和使用方式。
  • 正文
  • as

keywordGuaranteed 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!

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

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

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