天天看點

Swift講解專題五——集合類型(三)

Swift采用這樣的設計思路也有其一定的優化道理,我比較了一下,給大家舉一個最簡單的例子,在使用Objective-C進行iOS開發時,經常會遇到這樣的情況,某個控件中有一個UILabel控件,開發者在不想将控件暴漏在.h檔案中的情況下經常會聲明一個NSString類型的變量,重寫此變量的set方法來完成對UILabel控件的指派,仔細想來,實際上聲明的這個NSString變量完全是多餘的,它隻是為了用來做中間值得傳遞,Swift的set和get方法就在這裡進行了優化。另外,在set方法中會自動生成一個命名為newValue的變量作為傳遞進來的值,開發者也可以自定義這個變量的名稱,在set後加小括号即可,示例如下:

var privateCount:Int{

       get{

           return count;

       }

       set(myValue) {

          count=myValue+100

   }

       Swift中也提供了監聽屬性指派過程的方法,其使用的是willSet與didSet機制,示例如下:

class MyClass {

   var count:Int{

       //指派前執行(除了第一次初始指派) 将要指派的值以newValue傳入

       willSet{

           print("will set \(newValue)")

       //指派後執行(除了第一次初始指派) 原來的值以oldValue傳入

       didSet{

          print("did set \(oldValue)")

   let name = "珲少"

   func run() {

       print("run 100 miter")

   init(){

       count=200

}

九、枚舉和結構體

       Swift中的枚舉和C與Objective-C有很大的差别,在Swift中,枚舉也被作為一種資料類型來處理,其中可以添加函數方法。最基本的枚舉用法如下所示:

//枚舉可以多個case并列 也可以寫在一個case中以逗号分隔

enum MyEnum {

   case one

   case tew

   case three

   case Fir,Sec,Thr

var em = MyEnum.one

如果變量是類型确定的枚舉,在指派時可以省略枚舉名,示例如下:

var em:MyEnum = .one

Swift中的枚舉還有一個原始值的概念,要使用原始值,必須在建立枚舉類型時設定原始值的類型,示例如下:

enum MyEnum:Int {

   case one=1

var em = MyEnum.one.rawValue

如果原始值是Int類型,則預設從0開始依次遞增,開發者也可以手動設定每個枚舉值的原始值。同樣,也支援使用原始值來建立枚舉執行個體,如下:

var em = MyEnum(rawValue:1)

通過原始值執行個體的枚舉對象實際上回傳回一個optional類型的值,如果傳入的原始值參數不能比對到任何一個枚舉case,則可以使用if let結構進行判斷處理。

       在枚舉中封裝方法示例如下:

   func des() {

       switch self {

       case .one:

           print("one")

       default:

           print("else")

em?.des()

       Swift中的枚舉也可以添加附加值,在switch語句中取到對應的枚舉類型後,可以擷取開發者設定的附加值進行邏輯處理,示例如下:

//為這個類型天啊及一組附加值

   case one(String,Int)

var em = MyEnum.one("第一個元素", 1)

switch em {

//前面的let指定附加值為常量 或者用var指定為變量,括号内為附加值參數名

case let .one(param1, param2):

   print("One param is  \(param1) and two param is  \(param2).")

default:

   print("else")

       Swift中使用struct關鍵字來進行結構體的建立,結構體的功能和類相似,支援屬性與方法,但不同的是,結構體在傳遞時會被指派,類的執行個體則會以引用的方式傳遞。