構(gòu)造函數(shù)的介紹
構(gòu)造函數(shù)類似于OC中的初始化方法:init方法
默認(rèn)情況下載創(chuàng)建一個類時(shí),必然會調(diào)用一個構(gòu)造函數(shù)
即便是沒有編寫任何構(gòu)造函數(shù)切厘,編譯器也會提供一個默認(rèn)的構(gòu)造函數(shù)豹悬。
如果是繼承自NSObject,可以對父類的構(gòu)造函數(shù)進(jìn)行重寫
構(gòu)造函數(shù)的基本使用
構(gòu)造函數(shù)的基本使用
類的屬性必須有值
如果不是在定義時(shí)初始化值,可以在構(gòu)造函數(shù)中賦值
class Person: NSObject {
var name : String
var age : Int
// 重寫了NSObject(父類)的構(gòu)造方法
override init() {
name = ""
age = 0
}
}
// 創(chuàng)建一個Person對象
let p = Person()
初始化時(shí)給屬性賦值
很多時(shí)候,我們在創(chuàng)建一個對象時(shí)就會給屬性賦值
可以自定義構(gòu)造函數(shù)
注意:如果自定義了構(gòu)造函數(shù),會覆蓋init()方法.即不在有默認(rèn)的構(gòu)造函數(shù)
class Person: NSObject {
var name : String
var age : Int
// 自定義構(gòu)造函數(shù),會覆蓋init()函數(shù)
init(name : String, age : Int) {
self.name = name
self.age = age
}
}
// 創(chuàng)建一個Person對象
let p = Person(name: "why", age: 18)
字典轉(zhuǎn)模型(初始化時(shí)傳入字典)
真實(shí)創(chuàng)建對象時(shí),更多的是將字典轉(zhuǎn)成模型
注意:
去字典中取出的是NSObject,任意類型.
可以通過as!轉(zhuǎn)成需要的類型,再賦值(不可以直接賦值)
class Person: NSObject {
var name : String
var age : Int
// 自定義構(gòu)造函數(shù),會覆蓋init()函數(shù)
init(dict : [String : NSObject]) {
name = dict["name"] as! String
age = dict["age"] as! Int
}
}
// 創(chuàng)建一個Person對象
let dict = ["name" : "why", "age" : 18]
let p = Person(dict: dict)
字典轉(zhuǎn)模型(利用KVC轉(zhuǎn)化)
利用KVC字典轉(zhuǎn)模型會更加方便
注意:
KVC并不能保證會給所有的屬性賦值
因此屬性需要有默認(rèn)值
基本數(shù)據(jù)類型默認(rèn)值設(shè)置為0
對象或者結(jié)構(gòu)體類型定義為可選類型即可(可選類型沒有賦值前為nil)
class PerSon: NSObject {
var name :String
var age :Int = 0
//重寫父類的構(gòu)造函數(shù)
override init() {
name = ""
age = 0
}
//自定義構(gòu)造函數(shù)
init(name:String, age:Int) {
self.name = name
self.age = age
}
}
//字典轉(zhuǎn)化為模型(初始化時(shí)傳入字典)
class PerSonDic: NSObject {
var name : String
var age : Int
init(dict : [String : NSObject]) {
name = dict["name"] as! String
age = dict["age"] as! Int
}
}
//字典轉(zhuǎn)化為模型(利用KVC轉(zhuǎn)化)
class PersonKVC: NSObject {
var name : String?
var age : Int = 0
init (dict :[String: NSObject]) {
super.init()
setValuesForKeysWithDictionary(dict)
}
}
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
let p = PerSon()
p.age = 18
p.name = "wubiao"
print("name :\(p.name),age:\(p.age)")
//自定義構(gòu)造函數(shù)
let q = PerSon(name: "dxj", age: 18)
print("name :\(q.name),age:\(q.age)")
//字典
let dict = ["name" : "wubiao","age": 18]
let personDic = PerSonDic(dict: dict)
print(personDic.name + "\(personDic.age)")
//KVC
let personKvo = PersonKVC(dict: dict)
print(personKvo.name!,personKvo.age)
}
}