13-Swift中類的構造函數

一 構造函數的介紹

  • 構造函數相似於OC中的初始化方法:init方法
  • 默認狀況下載建立一個類時,必然會調用一個構造函數
  • 即使是沒有編寫任何構造函數,編譯器也會提供一個默認的構造函數。
  • 若是是繼承自NSObject,能夠對父類的構造函數進行重寫

二 構造函數的基本使用

  • 類的屬性必須有值
  • 若是不是在定義時初始化值,能夠在構造函數中賦值
class Person: NSObject {
    var name : String
    var age : Int

    // 重寫了NSObject(父類)的構造方法
    override init() {
        name = ""
        age = 0
    }
}

// 建立一個Person對象
let p = Person()

三 初始化時給屬性賦值

  • 不少時候,咱們在建立一個對象時就會給屬性賦值
  • 能夠自定義構造函數
  • 注意:若是自定義了構造函數,會覆蓋init()方法.即不在有默認的構造函數
class Person: NSObject {
    var name : String
    var age : Int

    // 自定義構造函數,會覆蓋init()函數
    init(name : String, age : Int) {
        self.name = name
        self.age = age
    }
}

// 建立一個Person對象
let p = Person(name: "why", age: 18)

四 字典轉模型(初始化時傳入字典)

  • 真實建立對象時,更多的是將字典轉成模型
  • 注意:
    • 去字典中取出的是NSObject,任意類型.
    • 能夠經過as!轉成須要的類型,再賦值(不能夠直接賦值)
class Person: NSObject {
    var name : String
    var age : Int

    // 自定義構造函數,會覆蓋init()函數
    init(dict : [String : NSObject]) {
        name = dict["name"] as! String
        age = dict["age"] as! Int
    }
}

// 建立一個Person對象
let dict = ["name" : "why", "age" : 18]
let p = Person(dict: dict)

五 字典轉模型(利用KVC轉化)

  • 利用KVC字典轉模型會更加方便
  • 注意:
    • KVC並不能保證會給全部的屬性賦值
    • 所以屬性須要有默認值
    • 基本數據類型默認值設置爲0
    • 對象或者結構體類型定義爲可選類型便可(可選類型沒有賦值前爲nil)
class Person: NSObject {
    // 結構體或者類的類型,必須是可選類型.由於不能保證必定會賦值
    var name : String?

    // 基本數據類型不能是可選類型,不然KVC沒法轉化
    var age : Int = 0

    // 自定義構造函數,會覆蓋init()函數
    init(dict : [String : NSObject]) {
        // 必須先初始化對象
        super.init()

        // 調用對象的KVC方法字典轉模型
        setValuesForKeysWithDictionary(dict)
    }
}

// 建立一個Person對象
let dict = ["name" : "why", "age" : 18]
let p = Person(dict: dict)
相關文章
相關標籤/搜索