1.第一种简单的模型
class Person: NSObject {
//name是可选的, 在OC中很多的属性都是在需要的时候创建的
//例如: vc.view tableViewCell.textLbale 因为在手机开发中,内存很宝贵,有些属性并不是一定需要分配空间的
//延时加载,在需要的时候创建
var name: String?
//给基本数据类型初始化
//使用KVC会提示无法找到age的KEY,因为Int是一个基本数据类型的结构体,OC中只有基本数据类型。因此对于基本数据类型要设置初始值。
var age: Int = 0
// var age: Int?
//私有属性
//如果是private属性,使用KVC设置值的时候,同样无法设置
//如果设置为private属性是禁止外部访问的
// private var title: String?
var title: String?
init(dict: [String: AnyObject]) {
super.init()
//setValuesForKeys是KVC方法
//KVC的方法又是OC的方法,在运行时给对象发送消息,这点要求对象已经实例化完成。super.init()就是用来保证对象初始化完成。
setValuesForKeys(dict)
}
//重写父类的方法
override func setValue(_ value: Any?, forUndefinedKey key: String) {
//没有调用super,将父类的代码完全覆盖,不会崩溃
}
}
1.第二种模型中嵌套模型
import UIKit
class AnchorModel: NSObject {
/// 房间ID
var room_id : Int = 0
/// 房间图片对应的URLString
var vertical_src : String = ""
/// 判断是手机直播还是电脑直播
// 0 : 电脑直播(普通房间) 1 : 手机直播(秀场房间)
var isVertical : Int = 0
/// 房间名称
var room_name : String = ""
/// 主播昵称
var nickname : String = ""
/// 观看人数
var online : Int = 0
/// 所在城市
var anchor_city : String = ""
init(dict : [String : Any]) {
super.init()
setValuesForKeys(dict)
}
override func setValue(_ value: Any?, forUndefinedKey key: String) {}
}
class BaseGameModel: NSObject {
// MARK:- 定义属性
var tag_name : String = ""
var icon_url : String = ""
// MARK:- 自定义构造函数
override init() {
}
init(dict : [String : Any]) {
super.init()
setValuesForKeys(dict)
}
override func setValue(_ value: Any?, forUndefinedKey key: String) {}
}
class AnchorGroup: BaseGameModel {
/// 该组中对应的房间信息
var room_list : [[String : NSObject]]? {
didSet {
guard let room_list = room_list else { return }
for dict in room_list {
anchors.append(AnchorModel(dict: dict))
}
}
}
/// 组显示的图标
var icon_name : String = "home_header_normal"
/// 定义主播的模型对象数组
lazy var anchors : [AnchorModel] = [AnchorModel]()
}
使用 eg:
func test() {
let bigDataGroup : AnchorGroup = AnchorGroup()
let result = [String: Any]()
// 1.将result转成字典类型
guard let resultDict = result as? [String : NSObject] else { return }
// 2.根据data该key,获取数组
guard let dataArray = resultDict["data"] as? [[String : NSObject]] else { return }
// 3.遍历字典,并且转成模型对象
// 3.1.设置组的属性
bigDataGroup.tag_name = "热门"
bigDataGroup.icon_name = "home_header_hot"
// 3.2.获取主播数据
for dict in dataArray {
let anchor = AnchorModel(dict: dict)
bigDataGroup.anchors.append(anchor)
}