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"
            )
        }
    }
    

    중첩 된 클래스 (struct)를 대체 할 때 이런 느낌이됩니다.



    부모 클래스 (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 로 최적화해 갑니다.

    매일 조금씩 리팩토링해 갑니다.



    🐣

    좋은 웹페이지 즐겨찾기