iOS收藏iOS-Swift

Swift 字典转模型 KVC

2017-11-01  本文已影响34人  EvanJq

在iOS开发中,需要对后台请求回来的数据进行处理解析成模型使用。这时就需要对数据(json/字典)转模型处理.
这里介绍不使用第三方框架,使用原生KVC方法。


定义BaseModel

import UIKit

@objcMembers  // 标记为OC属性,Swift4.0后为了与OC的API区分,需要添加,不然键值配对无效
class BaseModel: NSObject {
    convenience init(keyedValues: [String: Any]) {
        self.init()
        // 字典自动匹配属性名赋值
        self.setValuesForKeys(keyedValues)
    }
    
    override init() {
        super.init()
    }
    
    // 不定义遇到未定义字段会报错
    override func setValue(_ value: Any?, forUndefinedKey key: String) {
        // 处理字典中未定义字段,这里直接不处理解析
    }
    
    // 键值配对方法,子类可以重写该方法对特殊字段自定义处理
    override func setValue(_ value: Any?, forKey key: String) {
        super.setValue(value, forKey: key)
    }
}

模型定义时只需继承BaseModel:

class Man: BaseModel {
    var manId: String = ""
    var name: String = ""
    var age: Int = 0
    
    override func setValue(_ value: Any?, forKey key: String) {
        // 处理字段不统一属性
        if key == "id", let id = value as? String {
            manId = id
        } else {
            super.setValue(value, forKey: key)
        }
    }
}

let dict: [String: Any] = ["id": "20170101", "name": "小明", "age": 18]
let man = Man(keyedValues: dict)
print("id: \(man.manId) name: \(man.name) age: \(man.age)")

优点

缺点

上一篇 下一篇

猜你喜欢

热点阅读