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