前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Swift4.0 KVC 字典赋值模型改变

Swift4.0 KVC 字典赋值模型改变

作者头像
星宇大前端
发布2019-01-15 15:30:24
7880
发布2019-01-15 15:30:24
举报
文章被收录于专栏:大宇笔记大宇笔记

我们都知道KVC 是OC  NSobject特有的,之前在Swift4.0之前,继承NSobject的对象,可用动态的拿到字典调用KVC给模型赋值。只是比较省事的操作,有没有定义属性,只要从写UndefinedKey这个属性即可。

 还是用代码演示比如下面一个对象,从字典赋值

代码语言:javascript
复制
//
//  UserAccount.swift
//  WeiBo
//
//  Created by 张宇 on 2018/2/6.
//  Copyright © 2018年 张宇. All rights reserved.
//

//
//  用户账号Model
//

import UIKit

class UserAccount: NSObject {
    
    //MARK : 存储属性
    var  access_token:String = ""
    var  expires_in:TimeInterval = 0.0
    var  uid:String?
    
    init(dict:[String:Any]){
        super.init()
        setValuesForKeys(dict)
    }
    
    override func setValue(_ value: Any?, forUndefinedKey key: String) {
        
    }
    
    override var description: String{
        return  dictionaryWithValues(forKeys: ["access_token","expires_in","uid"]).description
    }
}

3.0这样写肯定是没有错误的,但是4.0的时候你就会发现一个问题forUndefinedKey这个方法每次都会调用,然后就崩溃了。

猜测原因:这是因为KVC是OC 的方法,OC方法和属性都需要运行时写到类对象中,swift 利用KVC设置属性需要运行时机制,swift4.0以前,编译器默认帮我们做了在对象声明前加上了@objc,4.0需要手动加上。

代码语言:javascript
复制
  //MARK : 存储属性
    @objc var  access_token:String = ""
    @objc var  expires_in:TimeInterval = 0.0
    @objc var  uid:String?

   这样就不会报错了。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018年02月06日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档