作ろうと思った背景
私はいつもAPIなどで取得したJSONを変換するときに Unbox にお世話になっています。
毎回毎回トランスファーなど作らなくても良いようにしたかったのでとりあえず作ってみました。
いつも利用しているライブラリ
Networking : Alamofire
Decoder : Unbox
Database : Realm
インスパイアー
UnboxedAlamofire
AlamofireからUnboxに変換を楽にするのはすでに作ってくれている人がいた!!
今回作ったライブラリ
名前の通り、Realm だけのためではなく、Unbox からCustomObjectに変換できるようになっています。
どんな値にも受け渡せるのでちょっと便利かも?
サンプルコード
Model
class Candy: Object, CustomUnboxed {
dynamic var name: String = ""
dynamic var sweetnessLevel: Int = 0
static func custom(unboxer: Unboxer) throws -> CustomUnboxed {
let candy: Candy = Candy()
candy.name = try unboxer.unbox(key: "name")
candy.sweetnessLevel = try unboxer.unbox(key: "sweetness_level")
return candy
}
}
Logic
let url = "https://raw.githubusercontent.com/serejahh/UnboxedAlamofire/890674cdfdcf2424f2c45ff5f4af455ccfaf7617/UnboxedAlamofireTests/fixtures/test_object.json"
Alamofire.request(url).responseObject { (response: DataResponse<Candy>) in
if let candy: Candy = response.result.value {
debugPrint(candy)
}
}
それっぽく動いているみたいですが、もし何かあれば CustomUnboxedAlamofire こちらでご報告ください。
対応できそうでしたら対応します。
気にしちゃいけないこと
Realm Docs Json
Json to Realm ができるみたいなのですが。。。
個人的には今回の方が Realm だけではなく他のものにも変換できるので好きかもですw