swift微博第16天(KVC字典转模型)
2017-12-10 本文已影响22人
IIronMan
下面以 HomeViewModel 为例,我所求的数据类型为: 数组套字典
import UIKit
class HomeViewModel: NSObject {
// 微博创建的时间
var created_at: String?
// 微博ID
var id: Int = 0
// 微博信息内容
var text: String?
// 微博来源
var source: String?
// 微博配图数组
var pic_urls: [[String: AnyObject]]?
class func loadStause(finshed: @escaping (_ models:[HomeViewModel]?,_ error:Error?)->()){
let account = UserAccount.loadAccount()
// 1.定义路径
let path = "2/statuses/home_timeline.json"
// 2.封装参数
let params = ["access_token":account?.access_token]
NetworkTools.shareNetworkTools().get(path, parameters: params, progress: nil, success: { (_, JSON) in
print(JSON!)
/*
1.取出Stause key对应的数组(存储的都是字典)
2.遍历数组将字典转化为模型
*/
let dict = JSON as! NSDictionary
print("statuses=\(dict["statuses"]!)")
if let statuses = dict["statuses"] as? [[String: AnyObject]] {
let models = HomeViewModel.dict2model(array: statuses)
finshed(models, nil)
}
}) { (_, error) in
finshed(nil, error)
}
}
// MARK: 字典转模型的方法
private class func dict2model(array:[[String: AnyObject]]) -> [HomeViewModel] {
var models1 = [HomeViewModel]()
for dict1 in array {
models1.append(HomeViewModel(dict: dict1))
}
return models1
}
// 字典转模型
init(dict: [String: AnyObject]){
super.init()
// 会调用 setValue forKey 给每一个属性赋值
setValuesForKeys(dict)
}
// 这句话的意思是字典转模型的时候 要一一对应的,为了防止没有的字段崩溃,那么就跳过(没有的字段会走这里的,不用做什么操作就好了)
// override func setValue(_ value: Any?, forKey key: String) {
//
// print("找不到\(key)")
// }
override func setValue(_ value: Any?, forUndefinedKey key: String) {
print(key)
}
// 打印当前的模型
static let properties = ["created_at","id","text","source","pic_urls"]
override var description: String{
let dict = self.dictionaryWithValues(forKeys: HomeViewModel.properties)
return "\(dict)"
}
}
模型的调用 一个简单的闭包
HomeViewModel.loadStause { (models, error) in
if error != nil
{
return
}
self.homeViewModels = models
print(self.homeViewModels!.count)
}