swift 4 KVC 赋值 报错

来源地址:http://m.blog.csdn.net/ZCMUCZX/article/details/78218643  表示感谢

案例背景:在json解析成对象的时候出现了键值对儿崩溃,一直提示找不到NSObject的属性


一直赋值失败
userType是systemUser的属性

在这里一定要记录下,因为在Swift中使用KVC,总是无法的找到Swift中创建的继承自NSObject类中的属性,每次执行的都是

override func setValue(_ value: Any?, forUndefinedKey key: String) {

}


systemUser 的NSObject Entity


原因是因为在Swift 4中继承 NSObject 的 swift class 不再默认全部 bridge 到 OC。也就是说如果我们想要使用KVC的话我们就需要加上@objcMembers 这么一个关键字。

引用: 在 swift 3 中除了手动添加 @objc 声明函数支持 OC 调用还有另外一种方式:继承 NSObject。class 继承了 NSObject 后,编译器就会默认给这个类中的所有函数都标记为 @objc ,支持 OC 调用。苹果在Swift 4 中苹果修改了自动添加 @objc 的逻辑:一个继承 NSObject 的 swift 类不再默认给所有函数添加 @objc。只在实现 OC 接口和重写 OC 方法时才自动给函数添加 @objc 标识。

所以我们在调用KVC的时候才不能被赋值。因为KVC是OC的方法。

推荐阅读更多精彩内容

  • 对于从事 iOS 开发人员来说,所有的人都会答出【runtime 是运行时】什么情况下用runtime?大部分人能...
    梦夜繁星阅读 3,267评论 7 66
  • 超级个体 首席提问官古典 的每日一问:13/30 假如你的所有存量-行业,企业和公司全部都清零,这一年接下来你会去...
    小霞儿阅读 56评论 0 0
  • 简介:一个小人物的半自传体,一个平凡的人在平凡的岗位上做着平凡的事,但是她的爱和幸福,快乐与痛苦却是那样真挚而热烈...
    小倩星阅读 321评论 8 61
  • 不要因为坎坷拒绝 命运之神给予我们的礼物 一场乏味单一的等待 没有炼狱的煎熬 只有拥抱过的微笑 残垣断壁在脑海中无...
    9胤祥9阅读 59评论 1 2
  • 画的时候断断续续。 最后半成。 总之, 是位很喜欢的青年作家。 喜欢他的文字, 喜欢他的作品。 还有他, 独有的古...
    胡同儿阅读 152评论 6 4