swift学习记录

Swift4.0 - setValuesForKeys() 无法

2018-03-20  本文已影响0人  令狐冲_

最近在用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

上一篇 下一篇

猜你喜欢

热点阅读