[swift]-類的構造函數

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 歡迎大家的閱讀和讚揚、謝謝!

相關文章
相關標籤/搜索