Swift KVC 的構(gòu)造函數(shù)

  1. 定義模型屬性的時(shí)候,如果是對象,通常都是可選的
    1.1 在需要的時(shí)候創(chuàng)建
    1.2 避免寫構(gòu)造函數(shù), 可以簡化代碼
  2. 如果是基本數(shù)據(jù)類型,不能設(shè)置成可選的,而且要設(shè)置初始值,否則KVC會(huì)崩潰
  3. 如果是基本數(shù)據(jù)類型, 不能設(shè)置成可選的, 而且要設(shè)置初始值,否則KVC會(huì)崩潰
  4. 在使用KVC方法之前,應(yīng)該調(diào)用 super.init 保證對象示例化完成!
class Person: NSObject {
   /*
    可選屬性,延遲加載,在需要的時(shí)候再創(chuàng)建,  有些屬性不一定需要分配內(nèi)存空間, 例如: tableView.detailLabel
*/
   var name: String?
   /*
    基本數(shù)據(jù)類型屬性初始化 使用KVC會(huì)提示無法找到age 的 KEY
    swift中 Int是一個(gè)基本數(shù)據(jù)類型的結(jié)構(gòu)體, OC中沒有, OC中只有基本數(shù)據(jù)類型
    
*/
//    var age: Int?   // 運(yùn)行時(shí)崩潰了
   var age: Int = 0
   
   // 如果是 private 屬性, 使用KVC的時(shí)候,同樣無法賦值
//     private var title: String?
   var title: String?
   // 重載構(gòu)造器,使用字典為本類設(shè)置初始值
   init(dic: [String: AnyObject]) {
       super.init()
       setValuesForKeys(dic)  //KVC 的方法  是OC 的方法,  在運(yùn)行時(shí)給對象發(fā)送消息
   }
// 重寫父類的方法, 防止字典中設(shè)置屬性中沒有的元素
   override func setValue(_ value: Any?, forUndefinedKey key: String) {
       // 沒有調(diào)用 super, 將父類的代碼實(shí)現(xiàn)完全覆蓋! 初始化時(shí)字典中有屬性額外的元素不會(huì)崩潰
   }

使用時(shí)

let p = Person(dic: ["name": "張三" as AnyObject, "age": 109 as AnyObject, "title": "BOSS" as AnyObject])
        print("\(p.name)" + "     \(p.age)"  + "    \(p.title)")  
// Optional("張三")     109    Optional("BOSS")

在子類中, 如果子類沒有重寫父類的方法, 調(diào)用的時(shí)候,會(huì)直接調(diào)用父類的方法

class Student: Person {
    var no: String?  
}

使用時(shí)

let s = Student(dic: ["name": "老航" as AnyObject, "age": 189 as AnyObject, "title": "Boss" as AnyObject, "no": "0001" as AnyObject])
print("\(s.name)  \(s.age)  \(s.title)  \(s.no)")
// Optional("老航")  189  Optional("Boss")  Optional("0001")

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 20- 枚舉,枚舉原始值,枚舉相關(guān)值,switch提取枚舉關(guān)聯(lián)值 Swift枚舉: Swift中的枚舉比OC中的枚...
    iOS_恒仔閱讀 2,423評論 1 6
  • Swift 介紹 簡介 Swift 語言由蘋果公司在 2014 年推出,用來撰寫 OS X 和 iOS 應(yīng)用程序 ...
    大L君閱讀 3,423評論 3 25
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,506評論 19 139
  • SwiftDay011.MySwiftimport UIKitprintln("Hello Swift!")var...
    smile麗語閱讀 4,079評論 0 6
  • 從OC過渡到Swift,并不是像別人說的那樣容易,利用幾個(gè)小時(shí)就可以掌握,也需要付出一番努力,在項(xiàng)目中得到提升...
    藍(lán)心兒的藍(lán)色之旅閱讀 3,316評論 3 1

友情鏈接更多精彩內(nèi)容