LoginSignup
3
1

More than 5 years have passed since last update.

ObjectMapperからDecodableに書き換える

Last updated at Posted at 2017-03-21

気をつけること

  • 他の class (struct) に依存していない class (struct) から書き換える

変換

Before

import ObjectMapper

struct Item: Mappable {
    var id: Int = 0
    var name = ""

    init?(map: Map) { }

    mutating func mapping(map: Map) {
        id <- map["id"]
        name <- map["name"]
        ...
    }
}

After

import Decodable

struct Item {
    let id: Int
    let name: String
}

extension Item: Decodable {
    static func decode(_ json: Any) throws -> Item {
        return try Item(
            id: json => "id",
            name: json => "name"
        )
    }
}

ネストしてある class (struct) を置き換えるときはこんな感じになる

親 class (struct)

import ObjectMapper

struct User: Mappable {
    var id: Int = 0
    var name = ""
    var item: Item?
    ...

    init?(map: Map) { }

    mutating func mapping(map: Map) {
        id <- map["id"]
        name <- map["name"]
        ...

        do {
            item = try Item.decode(map["item"].JSON)
        } catch {
            // なんか例外処理
        }
    }
}

子 class (struct)

import Decodable

struct Item {
    let id: Int
    let name: String
}

extension Item: Decodable {
    static func decode(_ json: Any) throws -> Item {
        return try Item(
            id: json => "item" => "id",
            name: json => "item" => "name"
        )
    }
}

こんな感じでちまちま置き換えて、すべての子 class (struct) がDecodableになったら親ごと一気にDecodableで最適化していきます。

毎日少しずつリファクタリングしていきます。

🐣:raised_hand:

3
1
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
1