swift:字典转模型构造方法

重载方法名相同,参数个数/参数类型不同

方法重载不仅仅局限于 init构造方法,其他的方法也同样使用


在init的构造方法中, 不需要在前面加func , 重写init需要添加关键字override . 在init方法中,需要在super.init之前完成初始化,这点与OC不同

重写是因为,系统提供的方法不能满足我们对属性的初始化的需要,在对属性初始化时,一定要用self声明属性是谁的,以防止赋值混淆

注: Xcode 7 bate 5 之后, 系统会默认 为我们调用super.init   不过, 建议熟练之前, 写上


KVC构造函数注意点: 基本数据类型不与KVC 兼容, 在KVC动态赋值的时候,找不到这个属性. 

解决办法: 在定义一个基本数据类型的同时设置默认值, 才能在KVC动态赋值的时候查找到这个属性 

例如: var age: Int = 0

KVC属性赋值的原理系统在运行时的时候,会动态的给 对象发送setValue forKey 这个方法,来给属性赋值

KVC属性赋值满足的2个条件: 1.对象得创建完成 2.属性完成初始化

init(dict: [StringAnyObject]){

super.init()

setValuesForKeysWithDictionary(dict)

}

同时为防止属性赋值,出现未定义的属性赋值产生崩溃,最好重写 forUndefinedKey 方法

forUndefinedKey 这个方法就是 字典里的key 找不对应的属性,就会抛出一个异常,如果我们重写这个方法,不调用父类方法,就可以不抛出异常

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

} //里面什么也不要写


ArticleListModel.swift里的模型文件:

import UIKit


class JFArticleListModel: NSObject {

    

    /// 作者昵称

    var username: String?

    

    /// 点击量

    var onclick: String?

    

    /// 发布时间

    var newstime: String?

    

    /// 创建文章时间戳

    var created_at: String?

    

    /// 文章id

    var id: String?

    

    /// 文章标题

    var title: String?

    

    /// 标题图片url

    var titlepic: String?

    

    /// 文章简介

    var smalltext: String?

    

    /// 数据表名

    var table: String?

    

    /// 父栏目id

    var bclassid: String?

    

    /// 当前栏目id

    var classid: String?

    

    /// 当前栏目名称

    var classname: String?

    

    /// 评论数量

    var plnum: String?

    

    /// 标题图片数量

    var piccount: Int = 0

    

    /// 多图数组 存储多张标题图片url的数组

    var morepic: [String]?

    

    /// 存储形变改变的偏移量

    var offsetY: CGFloat = 0

    

    /// 缓存行高

    var rowHeight: CGFloat = 0.0

    

    /**

     字典转模型构造方法

     */

    init(dict: [String : AnyObject]) {

        super.init()

        setValuesForKeysWithDictionary(dict)

    }

    

    override func setValue(value: AnyObject?, forUndefinedKey key: String) {}

    

}


NewsTableViewController.swift里的方法:


   // 字典转模型

let postModel = ArticleListModel(dict: dict)

                        



 var dict: [String : AnyObject] = [

                            "title" : article["title"].stringValue,          // 文章标题

                            "bclassid" : article["bclassid"].stringValue,    // 终极栏目id

                            "classid" : article["classid"].stringValue,      // 当前子分类id

                            "newstime" : article["newstime"].stringValue,    // 发布时间

                            "created_at" : article["created_at"].stringValue,// 创建文章时间戳

                            "username" : article["username"].stringValue,    // 用户名

                            "onclick" : article["onclick"].stringValue,      // 点击量

                            "smalltext" : article["smalltext"].stringValue// 简介

                            "id" : article["id"].stringValue,                // 文章id

                            "classname" : article["classname"].stringValue// 分类名称

                            "table" : article["table"].stringValue,          // 数据表名

                            "plnum" : article["plnum"].stringValue,          // 评论数量

                        ]



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值