Swift4.0 - setValuesForKeys() 无法赋值问题

最近在用swift 4.0写一个项目练练手,在赋值模型字典的时候调用

 open func setValuesForKeys(_ keyedValues: [String : Any])

发现无法赋值进去

例子


class Person: NSObject {
    
    var name : String?
    var age : Int = 0
    var height : Double = 0.0
    
    
    override init() {}
    
    init(dict:[String:Any]) {
        super.init()
        setValuesForKeys(dict)
    }
    
    override func setValue(_ value: Any?, forUndefinedKey key: String) {}
    
}

调用赋值代码

        let dict = ["name":"小明",
                    "age":18,
                    "height":"1.88",
                    "date":"1231"] as [String : Any]
        let p = Person(dict: dict)
        print(p.name,p.age,p.height)

打印结果

nil 0 0.0

原因

在swift3中,编译器自动推断@objc,换句话说,它自动添加@objc
在swift4中,编译器不再自动推断,你必须显式添加@objc

// 添加@objc
    @objc var name : String?
    @objc var age : Int = 0
    @objc var height : Double = 0.0

重新运行
打印结果

Optional("小明") 18 1.88

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容