首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> 關於C

Swift 2開發指南學習筆記(Day 48):類型檢查與轉換——is、as?、as!完整詳解

     編輯:關於C

繼承體系是類型檢查與轉換的前提。以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; /* 構造器 */ }

1. 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

2. 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/Worker
  • 轉換只能在繼承鏈上進行(向上隱式、向下顯式)
  • 優先用as?+if let保證安全

掌握類型檢查與轉換,是Swift多態編程的基石。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved