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