美文网首页
Swift问题1-setValuesForKeys字典转模型为n

Swift问题1-setValuesForKeys字典转模型为n

作者: 快乐的tomato | 来源:发表于2021-09-30 10:50 被阅读0次

网络请求数据后,解析json数据,得到模型对象 使用Swift5.0,通过setValuesForKeys保存字典数据,无法赋值

 /// 通过字典来创建模型
    init(dict: [String: AnyObject]) {
        
        super.init()
        // 对象创建好后才能使用对象的方法, 内部会调用setValue(value: AnyObject?, forKey key: String),每次拿一个key和value调用一次        
        setValuesForKeys(dict)
        }
    

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

详细说明:
1)在 Swift 4 中隐式 @objc 自动推断只会发生在下面这种必须要使用 @objc 的情况:
1,覆盖父类的 Objective-C 方法
2,符合一个 Objective-C 的协议
2)大多数地方必须手工显示地加上 @objc。

3)如果在类前加上 @objcMembers,那么它、它的子类、扩展里的方法都会隐式的加上 @objc。
4)如果在扩展(extension)前加上 @objc,那么该扩展里的方法都会隐式的加上 @objc。
5)如果在扩展(extension)前加上 @nonobjc,那么该扩展里的方法都不会隐式的加上 @objc。

@objcMembers
class UserAccount: NSObject {
    
    /// 用户授权的唯一票据
    var access_token: String?
    /// access_token的生命周期,单位是秒数, 基本数据类型不能使用?,KVC会找不到
    var expires_in: TimeInterval = 0 {
        didSet {
            // KVC给expires_in属性赋值完后,来创建expiresDate
            //OC中重写set方法
            expiresDate = NSDate(timeIntervalSinceNow: expires_in)
        }
    }
 /// 用户授权的唯一票据
    @objc var access_token: String?

参考:
在swift 5.0中用系统方法setValuesForKeys()赋值问题

相关文章

网友评论

      本文标题:Swift问题1-setValuesForKeys字典转模型为n

      本文链接:https://www.haomeiwen.com/subject/cscenltx.html