構造函數- -KVC構造函數

構造函數---KVC構造函數swift

/**ide

    構造函數  創建一個`對象`函數

    1. 給屬性分配空間spa

    2. 設置初始數值設計


    Swift 中構造函數`` init調試


    重載:OC中沒有重載的概念code


    函數名相同,參數的個數&類型不一樣,叫作重載,是面向對象設計語言必備標誌!orm

    OC 中使用 initWithXXX的方式替代對象

*/開發

//  Person.swift

import UIKit
class Person: NSObject {
    
    // 對象的屬性就是應該可變的
    // 可選項,容許變量爲空,var 的默認值就是 nil
    // 在 iOS 開發中,全部的屬性是延遲加載的
    var name: String?
    
    // age 和 KVC 不兼容,OC中Int屬於基本數據類型,不存在 `nil` 的概念
    var age: Int = 0
    
    /// KVC 的構造函數,用字典設置模型
    init(dict: [String: AnyObject]) {
        
        // KVC 是 OC 特有的,本質是在運行時,動態的給`對象`發送 `setVaule:forKey:` 消息
        // 設置數值 - 調用 super.init 保證對象已經被建立完成
        super.init()
        
        // KVC 的設置數值
        setValuesForKeysWithDictionary(dict)
    }
    
   
}


//  ViewController.swift

import UIKit
// 提示:在 Swift 中,默認全部的屬性和方法,都是全局共享的,不須要 import,能夠直接使用
class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        
        let p = Student(dict: ["name": "zhangsan", "age": 19])
       print("\(p.name) --- \(p.age)")
     
    }
}





KVC函數調用順序調試

//  Person.swift
import UIKit
class Person: NSObject {
    
    // 對象的屬性就是應該可變的
    // 可選項,容許變量爲空,var 的默認值就是 nil
    // 在 iOS 開發中,全部的屬性是延遲加載的
    var name: String?
    
    // age 和 KVC 不兼容,OC中Int屬於基本數據類型,不存在 `nil` 的概念
    var age: Int = 0
    
    /// KVC 的構造函數,用字典設置模型
    init(dict: [String: AnyObject]) {
        
        // KVC 是 OC 特有的,本質是在運行時,動態的給`對象`發送 `setVaule:forKey:` 消息
        // 設置數值 - 調用 super.init 保證對象已經被建立完成
        super.init()
        
        // KVC 的設置數值
        setValuesForKeysWithDictionary(dict)
    }
    
    override func setValue(value: AnyObject?, forKey key: String) {
        print("forKey \(key) - \(value)")
        
        super.setValue(value, forKey: key)
    }
    
    /// 默認的 setValue forUndefinedKey 方法若是出現未定義的key會拋出 `NSUndefinedKeyException`異常,讓程序崩潰
    /// 若是一旦重寫了此方法,同時不 super,不調用父類默認的方法!
    override func setValue(value: AnyObject?, forUndefinedKey key: String) {
        print("forUndefinedKey \(key) \(value)")
    }
}


//  ViewController.swift
import UIKit
// 提示:在 Swift 中,默認全部的屬性和方法,都是全局共享的,不須要 import,能夠直接使用
class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        
        let p = Student(dict: ["name": "網舞", "age": 19, "title": "hahah", "no": "009"])
        print("\(p.name) --- \(p.age)")
    }
}




相關文章
相關標籤/搜索