国产探花免费观看_亚洲丰满少妇自慰呻吟_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教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 盐边县| 禹州市| 浦东新区| 邮箱| 本溪市| 景泰县| 长治县| 福海县| 湟中县| 株洲市| 栾城县| 房山区| 乐都县| 德阳市| 常德市| 桃源县| 开化县| 太仓市| 兴和县| 尼勒克县| 邢台县| 太康县| 马边| 正阳县| 南部县| 竹北市| 龙海市| 金塔县| 鸡西市| 来凤县| 华池县| 棋牌| 泉州市| 东安县| 杨浦区| 公主岭市| 车致| 淮安市| 江山市| 罗甸县| 固阳县|