前言
由于swift本身特性的限制,处理类似JSON这样的弱类型数据一直不是很友好。用原生自带的Codable协议,但是要应对下面的情况,那就头疼了
- key写错了
- 类型搞错了
- 没有值
- 没有这个字段
使用
我们来看看ObjMapper的使用, 详细使用见如何优雅的使用Swift Codable协议:
// JSON:
let raw_json = """
{
"uid":888888,
"name":"Tom",
"age":10
}
"""
// Model:
struct Dog: Codable{
//如果字段不是可选类型,则使用Default,提供一个默认值
//1. 如果json中没有uid字段,则uid被设置成默认值0
//2. 如果json中uid的值是字符串,则自动转换成数字,如果转换失败,则被设置成默认值
@Default<Int.Zero> var uid: Int
//如果是可选类型,则使用Backed
//1. 如果json中没有age字段,则age=nil
//2. 如果json中age的值是字符串,则自动转换成数字
@Backed var age: Int?
@Backed var name: String?
}
//JSON to model
let dog = Dog.decodeJSON(from: raw_json)
//model to json
let json = dog.jsonString
规则
记住两个规则就可以了:
- 如果我们定义地段是可选类型,则使用@Backed。使用Backed后,如果类型不匹配,则类型会自动转换
- 如果字段不是可选类型,则使用@Default,提供一个默认值,如果没有找到该字段的值,则会用默认值代替
相比其他库,对于模型的定义和后期的使用,都简洁了很多。