詳解Swift中的數(shù)據(jù)類型類型轉(zhuǎn)換
一、類型檢查與轉(zhuǎn)換
在Objective-C和Java中,任何類型實(shí)例都可以通過強(qiáng)轉(zhuǎn)使編譯器認(rèn)為它是另一種類型的實(shí)例,這么做其實(shí)是將所有的安全檢查工作都交給了開發(fā)者自己來做。先比之下,Swift中的Optional類型轉(zhuǎn)換就會比較安全與可靠。
Swift中使用is關(guān)鍵字來進(jìn)行類型的檢查,其會返回一個(gè)布爾值true或者false來表明檢查是否成立,示例如下:
var str = "HS"
if str is String {
print(str)
}
Swift中有向上兼容與向下轉(zhuǎn)換的特性,就是說,一個(gè)父類類型的集合可以接收子類的實(shí)例,同樣,在使用這些實(shí)例變量時(shí)可以將其向下轉(zhuǎn)換為子類類型,示例如下:
//自定義一個(gè)類及其子類
class MyClass {
var name:String?
}
class MySubClassOne: MyClass {
var count:Int?
}
class MySubClassTwo: MyClass {
var isBiger:Bool?
}
//創(chuàng)建3個(gè)實(shí)例
var obj1 = MyClass()
obj1.name = "HS"
var obj2 = MySubClassOne()
obj2.count = 100
var obj3 = MySubClassTwo()
obj3.isBiger=true
//將實(shí)例存放在其公共父類類型的數(shù)組集合中
var array:[MyClass] = [obj1,obj2,obj3]
//進(jìn)行遍歷
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!)
}
}
有一點(diǎn)需要注意,在進(jìn)行類型轉(zhuǎn)換時(shí),可以使用as!或者as?來進(jìn)行,as!是一種強(qiáng)制轉(zhuǎn)換方法,它在開發(fā)者確定類型無誤是使用,如果用as!轉(zhuǎn)換的類型有誤,則會出現(xiàn)運(yùn)行時(shí)錯(cuò)誤。as?是Optional類型轉(zhuǎn)換,如果轉(zhuǎn)換失敗,則會返回nil。
二、Any和AnyObject類型
在Objective-C中,常常使用id來表示引用類型的泛型,Swift中的AnyObject與之類似。示例如下:
//進(jìn)行遍歷
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 as! MyClass).name!)
}
}
Any類型則比AnyOject類型更加強(qiáng)大,其可以混合值類型和引用類型一起工作,示例如下:
var anyArray:[Any] = [100,"HS",obj1,obj2,false,(1.1),obj3,{()->() in print("Closures")}]
上面示例的數(shù)組中包含了整型,字符串類型,引用類型,布爾類型和閉包。
相關(guān)文章
淺談在Swift中關(guān)于函數(shù)指針的實(shí)現(xiàn)
這篇文章主要介紹了淺談在Swift中關(guān)于函數(shù)指針的實(shí)現(xiàn),是作者根據(jù)C語言的指針特性在Swifft中做出的一個(gè)實(shí)驗(yàn),需要的朋友可以參考下2015-07-07
swift中defer的實(shí)際應(yīng)用小結(jié)
這篇文章主要給大家介紹了關(guān)于swift中defer的實(shí)際應(yīng)用的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01
Swift自動(dòng)調(diào)整視圖布局AutoLayout和AutoresizingMask功能詳解
這篇文章主要為大家介紹了Swift自動(dòng)調(diào)整視圖布局AutoLayout和AutoresizingMask功能及使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-06-06

