写在前面的话
现在很多iOS项目的开发开始转向Swift语言。 相信 Swift语言很快会成为iOS工程师 必备技能。 字典转模型, 模型转转字典在开发过程中扮演非常重要的角色。 今天就和大家分享一下使用Swift,如何进行字典模型互转。
Demo在这里
功能:
1,字典–>模型 :最简单的形式
class User: NSObject { //模型类
var name:String?
var icon:String?
// print时会调用。相当于java中的 toString()。为了代码整洁下面的模型去了这个计算属性。测试时请下载demo
override internal var description: String {
return "name: \(name) \n icon:\(icon) \n"
}
}
func func1(){
let dict = ["name":"Jack","icon":"lufy.png"]
if let user = User.objectWithKeyValues(dict) as? User{
print("\(user)")
}
}
输出: name: Optional("Jack")
icon: Optional("lufy.png")
2,字典–>模型 :模型中包裹模型
//模型类
class Status :NSObject {
var text:String?
var user:User? //与 1 中的模型相同
var retweetedStatus:Status?
}
func func2(){
let dict = ["text":"Agree!Nice weather!",
"user":["name":"Jack","icon":"lufy.png"],
"retweetedStatus":["text":"Nice weather!",
"user":["name":"Rose","icon":"nami.png"]]
]
if let status = Status.objectWithKeyValues(dict) as? Status{
print("\(status)")
}
}
输出:
text:Optional("Agree!Nice weather!")
user:Optional(name: Optional("Jack") icon:Optional("lufy.png"))
retweetedStatus:Optional(text:Optional("Nice weather!")
user:Optional(name: Optional("Rose")icon:Optional("nami.png"))
retweetedStatus:nil)
3,字典–>模型: 字典中包裹数组, 数组中的元素是 一个模型对应的字典
//模型类, 必须遵守DictModelProtocol协议, 并实现customClassMapping方法。
class UserGroup: NSObject,DictModelProtocol {
var groupName:String?; //团队名称
var numbers:NSArray? //成员,保存User实例
static func customClassMapping() -> [String: String]?{
return ["numbers":"User"]; //指定numbers数组中的元素类型是User
}
}
func func3(){
let dict = ["groupName":"Dream Team",
"numbers":[["name":"Jack","icon":"lufy.png"],
["name":"Rose","icon":"nami.png"]]
]
if let group = UserGroup.objectWithKeyValues(dict){
print("\(group)")
}
}
输出: groupName:Optional("Dream Team")
numbers:Optional((
"name: Optional(\"Jack\") \n icon:Optional(\"lufy.png\") \n",
"name: Optional(\"Rose\") \n icon:Optional(\"nami.png\") \n"
))
4,字典–>模型: 将一个字典数组转成模型数组
func func4(){
let arrayOfStatus = [["text":"Agree!Nice weather!",
"user":["name":"Jack",
"icon":"lufy.png"
],
"retweetedStatus":[