티스토리 뷰

반응형



다음과 같은 JSON에서 main 안에 있는 temp, temp_min, temp_max와 name을 가져오고 싶을 때 

JSON형식과 똑같은 형식으로 이름을 지정해줘야 에러없이 디코드 된다 



struct WeatherViewModel:Decodable {

    

    let name: String

    let main: TemperatureViewModel

    

}



struct TemperatureViewModel: Decodable{

    

    let temp: Double

    let temp_min: Double

    let temp_max: Double

    

}


 



let weatherVM = try? JSONDecoder().decode(WeatherViewModel.self, from: data)





하지만 


프로퍼티 이름을 다르게 해주고 싶을 때 가 있다 

특히 카멜케이스로 프로퍼티 이름을 지정해주고 있었는데 저런 네이밍이 들어가면 마음에 안든다!!


그때 CodingKey를 사용해준다 






struct WeatherViewModel:Decodable{

    

    let name: String

    let currentTemperature: TemperatureViewModel

    

    private enum CodingKeys: StringCodingKey{

        case name

        case currentTemperature = "main"

    }

}



struct TemperatureViewModel: Decodable{

    

    let temperature: Double

    let temperatureMin: Double

    let temperatureMax: Double

    

    private enum CodingKeys: String, CodingKey{

        case temperature = "temp"

        case temperatureMin = "temp_min"

        case temperatureMax = "temp_max"

    }

}





enum을 통해 내가 원하는 이름을 원래의 JSON 이름형식과 매칭 시켜주면 된다 


깔끔하고 예쁘다 : ) 



+ 애플 문서의 CodingKey 




      

반응형
댓글