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


Swift是蘋果於2014年發布的新開發語言,運行於Mac OS和iOS平台,開發基於蘋果平台的應用程序。在使用Swift語言的時候,我們經常會被 as、as!、as?三種類型轉換操作符混淆,這里總結了三種操作符的用法。

1. as


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

// 定義人員基類
class Person {
    var name : String
    
    init(_ name: String){
        self.name = name
    }
}

// 定義學生類
class Student : Person {
}

// 定義教師類
class Teacher : Person {
}

// 處理人員對象的函數(或工廠模式處理操作等)
func showPersonName(_ people : Person){
    let name = people.name
    print("這個人的名字是: \(name)")
}

// 定義一個學生對象 tom
var tom = Student("Tom");

// 定義一個教師對象 kevin
var kevin = Student("Kevin Jakson");

// 先把學生對象向上轉型為一般的人員對象
let person1 = tom as Person
let person2 = kevin as Person

// 再調用通用的處理人員對象的showPersonName函數
showPersonName(person1)
showPersonName(person2)

運行結果:
這個人的名字是: Tom
這個人的名字是: Kevin Jakson


(2)消除二義性,數值類型轉換

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


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

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

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

2. as!


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

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


3. as?

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

let person : Person = Teacher("Jimmy Lee")

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

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM