class Person : NSObject {
var name : String
var age : Int
// 重寫了NSObject(父類)的構造方法
override init() {
name = "張三"
age = 1
}
}
let p : Person = Person()
print("name = \(p.name) , age = \(p.age)") // name = 張三 , age = 1
初始化時給屬性賦值
很多時候,我們在創建一個對象時就會給屬性賦值
可以自定義構造函數
注意:如果自定義了構造函數,會覆蓋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: "李四", age: 18)
print("name = \(p.name) , age = \(p.age)") // name = 李四 , age = 18
字典轉模型(初始化時傳入字典)
真實創建對象時,更多的是將字典轉成模型
注意:
去字典中取出的是NSObject(任意對象類型)或者Any(任意類型).
可以通過as!轉成需要的類型,再賦值 (不可以直接賦值)
class Person: NSObject {
var name : String
var age : Int
// 自定義構造函數,會覆蓋init()函數
init(dict : [String : Any]) {
name = dict["name"] as! String
age = dict["age"] as! Int
}
}
// 創建一個Person對象
let dict : [String : Any] = ["name" : "王五" , "age" : 21]
let p = Person(dict: dict)
print("\(p.name) \(p.age)")
字典轉模型(利用KVC轉化)
利用KVC字典轉模型會更加方便
注意:
KVC并不能保證會給所有的屬性賦值(字典中可能沒有與某一個屬性匹配的鍵值對)
因此屬性需要有默認值
基本數據類型默認值設置為0
對象或者結構體類型定義為可選類型即可(可選類型沒有賦值前為nil)
class Person: NSObject {
// 結構體或者類的類型,必須是可選類型.因為不能保證一定會賦值
var name : String?
// 基本數據類型不能是可選類型,否則KVC無法轉化
var age : Int = 0
// 自定義構造函數,會覆蓋init()函數
init(dict : [String : Any]) {
// 必須先初始化對象
super.init()
// 調用對象的KVC方法字典轉模型
setValuesForKeys(dict)
}
}
// 創建一個Person對象
let dict : [String : Any] = ["name" : "李白", "age" : 18]
let p = Person(dict: dict)
print("\(p.name) \(p.age)")