LoginSignup
3
4

More than 5 years have passed since last update.

ObjectMapperで入れ子やString→NSURLの変換に対応する

Posted at

若干手間取ったのでメモ。

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)のようにタプルで渡す

参考:Hearst-DD/ObjectMapper

3
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4