> 软件编程 > IOS开发 >
ObjectMapper文档中文翻译 2016-11-11 10:13 出处:清屏网 人气:
ObjectMapper-CN-Guide
文档由Swift老司机活动中心负责翻译,欢迎关注@SwiftOldDriver。翻译有问题可以到 ObjectMapper-CN-Guide 提 PR。
ObjectMapper 是一个使用 Swift 编写的用于 model 对象(类和结构体)和 JSON 之间转换的框架。
为了支持映射,类或者结构体只需要实现 Mappable 协议。这个协议包含以下方法:
init?(map: Map) mutating func mapping(map: Map)ObjectMapper使用自定义的 <- 运算符来声明成员变量和 JSON 的映射关系。
class User: Mappable { var username: String? var age: Int? var weight: Double! var array: [AnyObject]? var dictionary: [String : AnyObject] = [:] var bestFriend: User? // 嵌套的 User 对象 var friends: [User]? // Users 的数组 var birthday: NSDate? required init?(map: Map) { } // Mappable func mapping(map: Map) { username <- map["username"] age <- map["age"] weight <- map["weight"] array <- map["arr"] dictionary <- map["dict"] bestFriend <- map["best_friend"] friends <- map["friends"] birthday <- (map["birthday"], DateTransform()) } } struct Temperature: Mappable { var celsius: Double? var fahrenheit: Double? init?(map: Map) { } mutating func mapping(map: Map) { celsius <- map["celsius"] fahrenheit <- map["fahrenheit"] } }一旦你的对象实现了 Mappable , ObjectMapper就可以让你轻松的实现和 JSON 之间的转换。
把 JSON 字符串转成 model 对象:
let user = User(JSONString: JSONString)把一个 model 转成 JSON 字符串:
let JSONString = user.toJSONString(prettyPrint: true)也可以使用 Mapper.swift 类来完成转换(这个类还额外提供了一些函数来处理一些特殊的情况:
// 把 JSON 字符串转成 Model let user = Mapper<User>().map(JSONString: JSONString) // 根据 Model 生成 JSON 字符串 let JSONString = Mapper().toJSONString(user, prettyPrint: true)ObjectMapper支持以下的类型映射到对象中:
所有的映射最后都会调用到这个函数。当解析 JSON 时,这个函数会在对象创建成功后被执行。当生成 JSON 时就只有这个函数会被对象调用。
init?(map: Map)这个可失败的初始化函数是 ObjectMapper 创建对象的时候使用的。开发者可以通过这个函数在映射前校验 JSON 。如果在这个方法里返回 nil 就不会执行 mapping 函数。可以通过传入的保存着 JSON 的 Map 对象进行校验:
required init?(map: Map){ // 检查 JSON 里是否有一定要有的 "name" 属性 if map.JSONDictionary["name"] == nil { return nil } } StaticMappable 协议StaticMappable 是 Mappable 之外的另一种选择。 这个协议可以让开发者通过一个静态函数初始化对象而不是通过 init?(map: Map) 。
注意: StaticMappable 和 Mappable 都继承了 BaseMappable 协议。 BaseMappable 协议声明了 mapping(map: Map) 函数。
static func objectForMapping(map: Map) -> BaseMappable?ObjectMapper 使用这个函数获取对象后进行映射。开发者需要在这个函数里返回一个实现 BaseMappable 对象的实例。这个函数也可以用于:
如果你需要在 extension 里实现 ObjectMapper,你需要选择这个协议而不是 Mappable 。
ImmutableMappable Protocol (Beta):warning: 这个特性还处于 Beta 阶段。正式发布时 API 可能会完全不同。
使用 ImmutableMappable 可以映射不可变的属性。下面的表格展示了 ImmutableMappable 和 Mappable 的不同:
ImmutableMappable Mappable
Properties
let id: Int let name: String? var id: Int! var name: String?
JSON -> Model