1:兩種基本的構造函數
swift
01-自定義構造函數:傳入基本參數ide
> 01-init(name : String, age : Int) { self.name = name self.age = age }
02-自定義構造函數:傳入一個字典函數
init(dict : [String : AnyObject]) { super.init() // kvc 調用對象的KVC方法字典轉模型 //self.setValuesForKeysWithDictionary(dict) setValuesForKeysWithDictionary(dict) }
// 注意:凡是使用kvc了,都要重寫:override func setValue(value: AnyObject?, forUndefinedKey key: String) {} ;由於字典裏某些字段不是類的屬性就能夠不會報錯了spa
override func setValue(value: AnyObject?, forUndefinedKey key: String) {}
知識點1:code
// as? 最終轉成的類型是一個可選類型 // as! 最終轉成的類型是一個肯定的類型,非可選類型
知識點2:對象
在類裏調用對象的方法如kvc方法:self能夠省略,//self.setValuesForKeysWithDictionary(dict) 簡寫成:setValuesForKeysWithDictionary(dict)it
知識點3:io
通常狀況下,super.init(),咱們不調用,系統會自動調用,系統調用是在該方法最後調用,可是當咱們調用系統的kvc方法的時候,咱們必定要確保該對象已經建立了,因此咱們須要提早手動調用super.init()這個方法,如:class
init(dict : [String : AnyObject]) { // 提早調用super.init(),確保該對象已經建立了,否則怎麼調用對象的一個kvc的方法呢 // 通常系統會默認調用super.init(),都是在該方法的最後的地方調用,這時候已經晚了,咱們須要在調用kvc方法前就須要調用 super.init() // kvc 調用對象的KVC方法字典轉模型 //self.setValuesForKeysWithDictionary(dict) setValuesForKeysWithDictionary(dict) }
2:代碼演示:import
import UIKit class Person: NSObject { var name : String? var age : Int = 0 // 在構造函數中,若是沒有明確super.init(),name系統會自動幫咱們調用super.init() override init() { //super.init() print("1111111") } // 自定義構造函數:傳入基本參數 init(name : String,age : Int) { print("22222") self.name = name self.age = age } // 自定義構造函數:傳入一個字典 // init(dict : [String : AnyObject]) { // let tempName = dict["name"] // //tempName是一個AnyObject?類型,轉成String? // // as? 最終轉成的類型是一個可選類型 // // as! 最終轉成的類型是一個肯定的類型,非可選類型 // name = tempName as? String // // //// let tempAge = dict["age"] //// //age = tempAge as! Int //// let tempAge1 = tempAge as? Int //// if tempAge1 != nil { //// age = tempAge1! //// } //// print(age) // // if let tempAge = dict["age"] as? Int { // age = tempAge // } // } init(dict : [String : AnyObject]) { // 提早調用super.init(),確保該對象已經建立了,否則怎麼調用對象的一個kvc的方法呢 // 通常系統會默認調用super.init(),都是在該方法的最後的地方調用,這時候已經晚了,咱們須要在調用kvc方法前就須要調用 super.init() // kvc 調用對象的KVC方法字典轉模型 //self.setValuesForKeysWithDictionary(dict) setValuesForKeysWithDictionary(dict) } override func setValue(value: AnyObject?, forUndefinedKey key: String) {} } //let p = Person() //let p1 = Person(name: "sky", age: 19) //if let name = p1.name { // print(name) //} //print(p1.age) let p2 = Person(dict: ["name" : "mike","age" : 18,"height" : 1.88]) print(p2.age) if let name = p2.name { print(name) }
意見反饋郵件:1415429879@qq.com 歡迎大家的閱讀和讚揚、謝謝!