国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Swift > 正文

詳解Swift中的數據類型類型轉換

2020-03-09 17:47:53
字體:
來源:轉載
供稿:網友

一、類型檢查與轉換

在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 = 100var 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")}]

上面示例的數組中包含了整型,字符串類型,引用類型,布爾類型和閉包。

 


注:相關教程知識閱讀請移步到swift教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 阳曲县| 平利县| 镶黄旗| 池州市| 白朗县| 富顺县| 南召县| 白城市| 永兴县| 瑞昌市| 定南县| 方城县| 富宁县| 高要市| 宁国市| 腾冲县| 图片| 长兴县| 象州县| 宁晋县| 织金县| 阿拉尔市| 天长市| 河东区| 大丰市| 都兰县| 普兰店市| 龙门县| 商水县| 泌阳县| 兴化市| 呼玛县| 德惠市| 梁平县| 柞水县| 河北省| 仙居县| 凌源市| 建宁县| 微博| 满城县|