若干手間取ったのでメモ。
import ObjectMapper
class Person: Mappable {
// 入れ子になるやつもMappableプロトコルに適合したclassかstructをつくる
struct ImageUrl: Mappable {
var raw: NSURL?
var large: NSURL?
var icon: NSURL?
init?(_ map: Map) {
mapping(map)
}
mutating func mapping(map: Map) {
// JSONにはStringで入っているので、NSURLに変換する
let urlTransform = TransformOf<NSURL, String>(fromJSON: { (value: String?) -> NSURL? in
if let value = value { return NSURL(string: value) } else { return nil }
}, toJSON: { (value: NSURL?) -> String? in
return value?.absoluteString
})
raw <- (map["raw"], urlTransform)
large <- (map["large"], urlTransform)
icon <- (map["icon"], urlTransform)
}
}
var name: String?
var imageUrl: ImageUrl?
init?(_ map: Map) {
mapping(map)
}
func mapping(map: Map) {
name <- map["name"]
imageUrl <- map["imageUrl"]
}
}
ポイント
- 入れ子になるやつもMappableプロトコルに適合したclassかstructをつくっておくと、勝手にマッピングしてくれる
- TransformOfで変換のロジックを書いて、
raw <- (map["raw"], urlTransform)
のようにタプルで渡す