ObjectMapperからDecodableに書き換える


気をつけること

  • 他の 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で最適化していきます。

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

🐣