繼承體系是類型檢查與轉換的前提。以Person為根類,Student、Worker為子類為例:
class Person {
var name: String; var age: Int
func description() -> String { return "\(name) 年齡是: \(age)" }
// 多個便利構造器...
}
class Student: Person { var school: String; /* 構造器 */ }
class Worker: Person { var factory: String; /* 構造器 */ }
is操作符:類型檢查判斷實例是否為某類型(含子類),返回Bool。
let student1 = Student(name: "Tom", age: 18, school: "清華大學")
let worker1 = Worker(name: "Tom", age: 18, factory: "鋼廠")
let people = [student1, student2, student3, worker1, worker2]
var studentCount = 0, workerCount = 0
for item in people {
if item is Worker { workerCount++ }
else if item is Student { studentCount++ }
}
print("工人人數:\(workerCount),學生人數:\(studentCount)") // 2, 3
as操作符:類型轉換(向下轉型)前提:繼承關係。聲明為父類類型、實例為子類類型時,需向下轉型訪問子類成員。
as?返回可選類型for item in people {
if let student = item as? Student {
print("Student school: \(student.school)")
} else if let worker = item as? Worker {
print("Worker factory: \(worker.factory)")
}
}
// 輸出各學校名與工廠名
as?失敗返回nil,配合if let安全解包。
as!強制解包let stud1 = people[0] as? Student // Optional(Student)
let stud2 = people[1] as! Student // Student 實例(非可選)
print(stud1) // Optional(Student)
print(stud2) // Student
| 操作符 | 用途 | 返回類型 | 失敗行為 | 適用場景 |
|---|---|---|---|---|
is | 類型檢查 | Bool | 返回false | 只需判斷類型 |
as? | 條件轉換 | 目標類型可選 | 返回nil | 不確定是否為目標類型 |
as! | 強制轉換 | 目標類型非可選 | 運行時崩潰 | 100%確信類型正確 |
Person實例(非子類)不能向下轉型為Student/Workeras?+if let保證安全掌握類型檢查與轉換,是Swift多態編程的基石。