问题描述
Swift4.0中,在网络请求到json数据后,进行数据解析,使用setValuesForKeys()进行赋值,明明定义了对应属性,但它还是走
override func setValue(_ value: Any?, forUndefinedKey key: String) {}
这个未定义的方法。
// 错误代码!!!
import UIKit
class NewsModel: NSObject {
// MARK: - 定义属性
var replyCount : Int = 0
var title : String = ""
var source : String = ""
var imgsrc : String = ""
// MARK: - 定义构造函数
init(dict : [String : Any]) {
super.init()
setValuesForKeys(dict)
}
override func setValue(_ value: Any?, forUndefinedKey key: String) {}
}
原因
在swift3中,编译器自动推断@objc,即自动添加@objc
在swift4中,编译器不再自动推断,你必须显式添加@objc
解决办法
// 正确代码!!!
// MARK: - 定义属性
@objc var replyCount : Int = 0
@objc var title : String = ""
@objc var source : String = ""
@objc var imgsrc : String = ""
或者
// 正确代码!!!
@objcMembers
class NewsModel: NSObject {
// MARK: - 定义属性
var replyCount : Int = 0
var title : String = ""
var source : String = ""
var imgsrc : String = ""
··· ··· ···
}
参考
Swift4.0 — setValuesForKeys() 无法赋值问题
在swift 4.0中用系统方法setValuesForKeys()赋值问题
Swift4.0在解析JSON数据时,使用setValuesForKeys()方法出现无法赋值的问题。原因是该版本不再自动添加@objc。解决办法是在需要的地方显式添加@objc或者使用 Coding 协议进行序列化。
186

被折叠的 条评论
为什么被折叠?



