Swift4.0 KVC 字典賦值模型改變
我們都知道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?
這樣就不會報錯了。
相關文章
- vue 變數賦值同時改變的問題Vue變數賦值
- Java 中賦值類時候修改後原類中的值改變Java賦值
- php之普通變數賦值、物件賦值、引用賦值的區別PHP變數賦值物件
- 變數的賦值 指標間接賦值變數賦值指標
- javascript變數賦值或者重新賦值注意事項JavaScript變數賦值
- 變數的解構賦值變數賦值
- shell 變數賦值問題變數賦值
- shell變數命名與賦值變數賦值
- php變數賦值給jsPHP變數賦值JS
- python 多變數賦值Python變數賦值
- PLSQL Language Reference-PL/SQL語言基礎-變數賦值-使用賦值語句賦值SQL變數賦值
- python中的字典賦值操作怎麼實現?Python賦值
- iOS - KVC 鍵值編碼iOS
- PLSQL Language Reference-PL/SQL語言基礎-變數賦值-對BOOLEAN變數賦值SQL變數賦值Boolean
- 物件屬性值賦給變數物件變數
- 給物件引用變數賦值(轉)物件變數賦值
- jquery改變元素屬性值jQuery
- c#小灶——常量、變數和賦值C#變數賦值
- AC-DMIS 5.3 V變數賦值變數賦值
- shell中變數的取值與賦值變數賦值
- 再說mysql中的變數賦值MySql變數賦值
- Javascript 解構賦值,將屬性/值從物件/陣列中取出,賦值給其他變數JavaScript賦值物件陣列變數
- PLSQL Language Reference-PL/SQL語言基礎-變數賦值-使用SELECT INTO賦值SQL變數賦值
- iOS開發·runtime+KVC實現多層字典模型轉換(多層資料:模型巢狀模型,模型巢狀陣列,陣列巢狀模型)iOS模型巢狀陣列
- JS中的變數賦值深入理解JS變數賦值
- 列表切片賦值給另一個變數賦值變數
- go語言變數的宣告與賦值Go變數賦值
- 自己對Java中if變數賦值的理解Java變數賦值
- ES6:變數的解構賦值變數賦值
- ES6:變數的結構賦值變數賦值
- 複製物件重新賦值不改變原物件物件賦值
- ES6 變數的解構賦值變數賦值
- ECMAScript6變數的解構賦值變數賦值
- Java記憶體模型FAQ(八)Final欄位如何改變它們的值Java記憶體模型
- Java之StringBuffer可變字串(值可以改變)Java字串
- 【c++】深賦值與淺賦值C++賦值
- MySQL中變數的定義和變數的賦值使用MySql變數賦值
- ECMAScript 6入門 - 變數的解構賦值變數賦值