Swift中,資料的檢查和轉換需要使用 is 和 as 關鍵字。
var str = "andy"
// 進行實例的類型檢查
if str is String {
print("str is String")
}
對於有繼承關係的類,檢查有如下原則
// 建立一個基類
class BaseClass {
}
// 建立一個子類
class MyClass: BaseClass{
}
var cls1 = BaseClass()
var cls2 = MyClass()
// 使用父類實例來進行子類類型的檢查,會返回false
if cls1 is MyClass {
print("cls is MyClass")
}
// 使用子類實例來進行父類類型的檢查,會返回true
if cls2 is BaseClass {
print("cls2 is BaseClass")
}
類型轉換,Swfit使用的是 as 關鍵字,與類型檢查相似,Swift中有向上兼容向下轉換的原則。
// 自定義一個類及其子類
class MyClass: BaseClass{
var name: String?
}
class MySubClassOne: MyClass{
var count: Int?
}
class MySubClassTwo: MyClass{
var isBiger: Bool?
}
// 建立三個實例
var obj1 = MyClass()
obj1.name = "andy"
var obj2 = MySubClassOne()
obj2.count = 100
var obj3 = MySubClassTwo()
obj3.isBiger = true
// 將實例存放在其公共父類類型的陣列集合中
var array[MyClass] = [obj1,obj2,obj3]
// 進行遍歷
for var i in 0..<array.count {
var obj = array[i]
if obj is MySubClassOne {
// 進行類型轉換
print((obj as! MySubClassOne).count!)
continue
}
if obj is MySubClassTwo {
// 進行類型轉換
print((obj as! MySubClassTwo).isBiger!)
continue
}
if obj is MyClass {
// 使用父類共有的屬性
print(obj.name)
}
}
在使用類型轉換時,需要使用as?或是as!是一種比較安全的轉換方式,其會將類型轉換後的結果映射為Optional值,如果類型轉換成功,則值為原實例,如果類型轉換失敗,則會返回Optional值nil。而as!是一種強制轉換方式,其默認此次轉換一定成功,如果轉換失敗,則會產生運行時錯誤,程式會crash,開發者在使用as!類型轉換時,必須保證實例的真實類型和要轉換的類型一致。
接下來,是類型轉換的介紹