構(gòu)造函數(shù)的介紹
- 構(gòu)造函數(shù)類(lèi)似于OC中的初始化方法:init方法
- 默認(rèn)情況下載創(chuàng)建一個(gè)類(lèi)時(shí),必然會(huì)調(diào)用一個(gè)構(gòu)造函數(shù)
- 即便是沒(méi)有編寫(xiě)任何構(gòu)造函數(shù),編譯器也會(huì)提供一個(gè)默認(rèn)的構(gòu)造函數(shù)灼舍。
- 如果是繼承自NSObject,可以對(duì)父類(lèi)的構(gòu)造函數(shù)進(jìn)行重寫(xiě)
構(gòu)造函數(shù)的基本使用
構(gòu)造函數(shù)的基本使用 - 類(lèi)的屬性必須有值
- 如果不是在定義時(shí)初始化值,可以在構(gòu)造函數(shù)中賦值
class Person: NSObject {
var name : String
var age : Int
// 重寫(xiě)了NSObject(父類(lèi))的構(gòu)造方法
override init() {
name = ""
age = 0
}
}
// 創(chuàng)建一個(gè)Person對(duì)象
let p = Person()
初始化時(shí)給屬性賦值
- 很多時(shí)候,我們?cè)趧?chuàng)建一個(gè)對(duì)象時(shí)就會(huì)給屬性賦值
- 可以自定義構(gòu)造函數(shù)
- 注意:如果自定義了構(gòu)造函數(shù),會(huì)覆蓋init()方法.即不在有默認(rèn)的構(gòu)造函數(shù)
class Person: NSObject {
var name : String
var age : Int
// 自定義構(gòu)造函數(shù),會(huì)覆蓋init()函數(shù)
init(name : String, age : Int) {
self.name = name
self.age = age
}
}
// 創(chuàng)建一個(gè)Person對(duì)象
let p = Person(name: "a", age: 18)
字典轉(zhuǎn)模型(初始化時(shí)傳入字典)
- 真實(shí)創(chuàng)建對(duì)象時(shí),更多的是將字典轉(zhuǎn)成模型
- 注意:
- 去字典中取出的是NSObject,任意類(lèi)型.
- 可以通過(guò)as!轉(zhuǎn)成需要的類(lèi)型,再賦值(不可以直接賦值)
class Person: NSObject {
var name : String
var age : Int
// 自定義構(gòu)造函數(shù),會(huì)覆蓋init()函數(shù)
init(dict : [String : NSObject]) {
name = dict["name"] as! String
age = dict["age"] as! Int
}
}
// 創(chuàng)建一個(gè)Person對(duì)象
let dict = ["name" : "a", "age" : 18]
let p = Person(dict: dict)
字典轉(zhuǎn)模型(利用KVC轉(zhuǎn)化)
- 利用KVC字典轉(zhuǎn)模型會(huì)更加方便
- 注意:
- KVC并不能保證會(huì)給所有的屬性賦值
- 因此屬性需要有默認(rèn)值
- 基本數(shù)據(jù)類(lèi)型默認(rèn)值設(shè)置為0
- 對(duì)象或者結(jié)構(gòu)體類(lèi)型定義為可選類(lèi)型即可(可選類(lèi)型沒(méi)有賦值前為nil)
class Person: NSObject {
// 結(jié)構(gòu)體或者類(lèi)的類(lèi)型,必須是可選類(lèi)型.因?yàn)椴荒鼙WC一定會(huì)賦值
var name : String?
// 基本數(shù)據(jù)類(lèi)型不能是可選類(lèi)型,否則KVC無(wú)法轉(zhuǎn)化
var age : Int = 0
// 自定義構(gòu)造函數(shù),會(huì)覆蓋init()函數(shù)
init(dict : [String : NSObject]) {
// 必須先初始化對(duì)象
super.init()
// 調(diào)用對(duì)象的KVC方法字典轉(zhuǎn)模型
setValuesForKeysWithDictionary(dict)
}
}
// 創(chuàng)建一個(gè)Person對(duì)象
let dict = ["name" : "a", "age" : 18]
let p = Person(dict: dict)