티스토리 뷰
다음과 같은 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: String, CodingKey{
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
'🍏 > iOS' 카테고리의 다른 글
[Protocol] 프로토콜 뽀개기 (0) | 2019.01.08 |
---|---|
[Enum] enum 꿀팁 - CaseIterable, Extension (0) | 2018.12.31 |
[StatusBar] StatusBar 색깔을 White로 바꾸자 (0) | 2018.12.29 |
UICollectionViewCell 간의 간격에 대하여 (0) | 2018.11.03 |
JS에서 SWIFT를 불러보자 ( 웹뷰에서 네이티브로 화면이동가능한 하이브리드 앱 구현 위해 ) (2) | 2018.09.20 |
- Total
- Today
- Yesterday
- SerializerMethodField
- METAL
- flutter build mode
- ribs
- ipad multitasking
- Watch App for iOS App vs Watch App
- Flutter getter setter
- 플러터 얼럿
- DRF APIException
- Django Heroku Scheduler
- 장고 Custom Management Command
- drf custom error
- Flutter Spacer
- flutter 앱 출시
- 구글 Geocoding API
- Flutter Text Gradient
- cocoapod
- flutter deep link
- Sketch 누끼
- Django FCM
- Flutter 로딩
- Dart Factory
- flutter dynamic link
- 플러터 싱글톤
- 장고 URL querystring
- Flutter Clipboard
- Django Firebase Cloud Messaging
- PencilKit
- Python Type Hint
- github actions
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |