詳解Swift中的數據類型類型轉換。本站提示廣大學習愛好者:(詳解Swift中的數據類型類型轉換)文章只能為提供參考,不一定能成為您想要的結果。以下是詳解Swift中的數據類型類型轉換正文
一、類型反省與轉換
在Objective-C和Java中,任何類型實例都可以經過強轉使編譯器以為它是另一品種型的實例,這麼做其實是將一切的平安反省任務都交給了開發者自己來做。先比之下,Swift中的Optional類型轉換就會比擬平安與牢靠。
Swift中運用is關鍵字來停止類型的反省,其會前往一個布爾值true或許false來標明反省能否成立,示例如下:
var str = "HS" if str is String { print(str) }
Swift中有向上兼容與向下轉換的特性,就是說,一個父類類型的集合可以接納子類的實例,異樣,在運用這些實例變量時可以將其向下轉換為子類類型,示例如下:
//自定義一個類及其子類 class MyClass { var name:String? } class MySubClassOne: MyClass { var count:Int? } class MySubClassTwo: MyClass { var isBiger:Bool? } //創立3個實例 var obj1 = MyClass() obj1.name = "HS" 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?來停止,as!是一種強迫轉換辦法,它在開發者確定類型無誤是運用,假如用as!轉換的類型有誤,則會呈現運轉時錯誤。as?是Optional類型轉換,假如轉換失敗,則會前往nil。
二、Any和AnyObject類型
在Objective-C中,經常運用id來表示援用類型的泛型,Swift中的AnyObject與之相似。示例如下:
//停止遍歷 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類型愈加弱小,其可以混合值類型和援用類型一同任務,示例如下:
var anyArray:[Any] = [100,"HS",obj1,obj2,false,(1.1),obj3,{()->() in print("Closures")}]
下面示例的數組中包括了整型,字符串類型,援用類型,布爾類型和閉包。