Mobile/iOS
swift. Codable의 변경사항. json snake to camel
out of coding
2019. 3. 23. 18:40
결혼준비를 하느라 제가 이것저것 못보고 살았네요.
얼마전에 개발을 위해서 자료를 보던중에 swift4.1에서 추가된 부분을 작게 적으려고 합니다.
간략하게 기능만 이야기를 하면 snake case를 더 이상 enum을 만들어서 처리하지 않아도 됩니다.
무슨 이야기냐면 저희는 변수명을 언더바가 들어간 스네이크를 잘 사용하지 않지만 서버는 이런걸 좋아하죠.
바로 설명으로 간략하게 정리만 하겠습니다. 옵션만 추가하게 되면 됩니다.
다음과 같은 json data 가 있다고 합시다.
1 2 3 4 5 6 7 | let json = """ { "silver_winner": "Sound", "gold_winner": "Light", "bronze_winner": "Unladen Swallow" } """.data(using: .utf8)! | cs |
struct를 이런 형태로 받고 싶은겁니다.
1 2 3 4 5 | struct OlympicEventResult: Codable { var goldWinner: String var silverWinner: String var bronzeWinner: String } | cs |
이전에는 이것을 CodingKey 이런걸 사용하여서 하나씩 매핑할 키를 넣어주어야 했습니다.
하지만. 이것을 쉽게 할수 있는 방법이 있습니다.
1 2 3 4 5 6 7 | let decoder = JSONDecoder() let decodeAndPrint = { print(try! decoder.decode(OlympicEventResult.self, from: json)) } decoder.keyDecodingStrategy = .convertFromSnakeCase decodeAndPrint() // Prints: "OlympicEventResult(goldWinner: "Light", silverWinner: "Sound", bronzeWinner: "Unladen Swallow")" | cs |
바로 keyDecodingStrategy를 설정하여 주는 겁니다.
오... 이제 그런 필요없는 CodingKey를 넣어주지 않아도 됩니다.
이것 관련해서 제가 Mirror를 이용해서 뭔가 만들고 있었는데, 소용이 없어졌군요 쩝. ㅎㅎ
글머 다들 즐거운 코딩 되시길...