Swift4.0 KVC 字典賦值模型改變
阿新 • • 發佈:2019-02-16
我們都知道KVC 是OC NSobject特有的,之前在Swift4.0之前,繼承NSobject的物件,可用動態的拿到字典呼叫KVC給模型賦值。只是比較省事的操作,有沒有定義屬性,只要從寫UndefinedKey這個屬性即可。
還是用程式碼演示比如下面一個物件,從字典賦值
// // UserAccount.swift // WeiBo // // Created by 張宇 on 2018/2/6. // Copyright © 2018年 張宇. All rights reserved. // // // 使用者賬號Model // import UIKit class UserAccount: NSObject { //MARK : 儲存屬性 var access_token:String = "" var expires_in:TimeInterval = 0.0 var uid:String? init(dict:[String:Any]){ super.init() setValuesForKeys(dict) } override func setValue(_ value: Any?, forUndefinedKey key: String) { } override var description: String{ return dictionaryWithValues(forKeys: ["access_token","expires_in","uid"]).description } }
3.0這樣寫肯定是沒有錯誤的,但是4.0的時候你就會發現一個問題forUndefinedKey這個方法每次都會呼叫,然後就崩潰了。
猜測原因:這是因為KVC是OC 的方法,OC方法和屬性都需要執行時寫到類物件中,swift 利用KVC設定屬性需要執行時機制,swift4.0以前,編譯器預設幫我們做了在物件宣告前加上了@objc,4.0需要手動加上。
//MARK : 儲存屬性
@objc var access_token:String = ""
@objc var expires_in:TimeInterval = 0.0
@objc var uid:String?
這樣就不會報錯了。