swift3.0 使用KVC和类型方法实现字典转模型

//
//  RMBaseModel.swift
//  OnlineHire
//
//  Created by YR on 2016/12/7.
//  Copyright © 2016年 room1000. All rights reserved.
//

import UIKit

class RMBaseModel: NSObject {
    
    required override init() {
        super.init()
    }
    
    //类方法
    class func model(with dictionary: [String: Any]?) -> Self {
        let obj = self.init()
        //使用kvc机制给模型属性赋值
        obj.setValuesForKeys(dictionary!)
        return obj
    }
    
    //重写kvc方法
    override func setValue(_ value: Any?, forKey key: String) {
        let str: String!
        
        //将字段值转换为字符串
        if value != nil && !(value is NSNull) && (value is NSNumber || value is Int) {
            str = String(describing: value!)
            super.setValue(str, forKey: key)
        } else {
            if value == nil || value is NSNull {
                super.setValue("", forKey: key)
            } else {
                super.setValue(value!, forKey: key)
            }
        }
    }
    
    //将模型对象未定义的字段在控制台打印出来
    override func setValue(_ value: Any?, forUndefinedKey key: String) {
        print(object_getClass(value))
        print(String(describing: self.classForCoder)+" 类的 undefined "+key+" == "+String(describing:value))
    }
}

需要将模型类继承该类
缺陷:
模型类的字段必须和接口出参的字段保持一致

你可能感兴趣的:(swift3.0 使用KVC和类型方法实现字典转模型)