程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 更多關於編程 >> 詳解Swift中的數據類型類型轉換

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

編輯:更多關於編程

詳解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")}]

下面示例的數組中包括了整型,字符串類型,援用類型,布爾類型和閉包。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved