Swift5.0 Swift中的 as、as!、as? 三種操作符如何使用

Swift是蘋果于2014年發(fā)布的新開發(fā)語言,運行于Mac OS和iOS平臺,開發(fā)基于蘋果平臺的應(yīng)用程序。在使用Swift語言的時候,我們經(jīng)常會被 as、as!、as?三種類型轉(zhuǎn)換操作符混淆,這里總結(jié)了三種操作符的用法。

1. as

(1)從派生類轉(zhuǎn)換為基類,向上轉(zhuǎn)型(upcasts)

// 定義人員基類 class Person {
    var name : String init(_ name: String){
        self.name = name
    }
} // 定義學生類 class Student : Person {
} // 定義教師類 class Teacher : Person {
} // 處理人員對象的函數(shù)(或工廠模式處理操作等)
func showPersonName(_ people : Person){
    let name = people.name print("這個人的名字是: \(name)")
}
 // 定義一個學生對象 tom
var tom = Student("Tom"); 
// 定義一個教師對象 kevin
var kevin = Teacher("Kevin Jakson"); // 先把學生對象向上轉(zhuǎn)型為一般的人員對象
let person1 = tom as Person
let person2 = kevin as Person // 再調(diào)用通用的處理人員對象的showPersonName函數(shù)
showPersonName(person1)
showPersonName(person2)</pre>

運行結(jié)果:
這個人的名字是: Tom
這個人的名字是: Kevin Jakson

(2)消除二義性,數(shù)值類型轉(zhuǎn)換

let age = 28 as Int
let money = 20 as CGFloat
let cost = (50 / 2) as Double

(3)switch 語句中進行模式匹配
通過switch語法檢測對象的類型,根據(jù)對象類型進行處理。

switch person1 { 
  case let person1 as Student: 
    print("是Student類型,打印學生成績單...") 
  case let person1 as Teacher: 
    print("是Teacher類型,打印老師工資單...") 
  default: break
}

運行結(jié)果:
是Student類型,打印學生成績單...

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

let person : Person = Teacher("Jimmy Lee")
let jimmy = person as! Teacher

3. as?

as? 和 as! 操作符的轉(zhuǎn)換規(guī)則完全一樣。但 as? 如果轉(zhuǎn)換不成功的時候便會返回一個 nil 對象。成功的話返回可選類型值。由于 as? 在轉(zhuǎn)換失敗的時候也不會出現(xiàn)錯誤,所以對于如果能確保100%會成功的轉(zhuǎn)換則可使用 as!,否則使用 as?

let person : Person = Teacher("Jimmy Lee") 
if let someone = person as? Teacher{ 
  print("這個人是教師, 名字是 \(someone.name)")
} 
else {
  print("這個人不是教師, 'tom'的值是 nil")
}

運行結(jié)果:
這個人是教師, 名字是 Jimmy Lee

?著作權(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)容