티스토리 뷰
문제 상황 이해하기
카카오 API를 활용해서 JSON을 받아오고, iOS에서 decoding 하려고 하는데 문제가 발생했어요.
우선 아래는 Kakao API 개발 가이드에 나오는 내용이에요.
datetime의 타입은 Datetime이고, 그 형식은 IOS 8601이에요.
그래서 아래와 같은 코드로 Decoder를 설정한 후 Decoding을 진행했어요.
let decoder = JSONDecoder()
decoder.dateDecodingStrategy = .iso8601
분명히 dateDecodingStrategy가 iso8601이기 때문에 문제가 없어 보였어요. ISO 8601은 일종의 규격이기 때문에 통일되어 있을 거라고 판단했어요.
그런데 원하는 결과물이 나오지 않았고, 어디에서 문제가 발생했는지 디버그 중 문제가 Date에서 발생하는 것을 발견했어요.
문제 원인 파악하기
처음에는 ISO8601이라는 곳이 문제일 것이라고 생각도 하지 못했어요. 그래서 다른 부분을 변경해보다가 혹시나 하는 마음에 검색을 해봤어요.
그러다가 Stack OverFlow에서 답변을 발견했어요.
ISO-8601이 공식적인 규격이라고 하더라도 더 다양하게 세분화되어있었어요.
Swift의 경우 RFC3339 포맷에서 ISO-8601 포맷을 따르기 때문에, 위에 나오는 예시의 Date 타입을 변환할 수 있어요.
그런데 카카오 공식 문서로 되돌아가 보면
으로 타입이 상세히 명세되어 있는데, 위에 보이는 RFC3339에는 카카오 API에서 제공하는 Date 타입이 존재하지 않아요.
결론적으로 "초 이하 단위의 세 자리 숫자"와 함께 타임존을 제공하는 ISO8601 DateTime 자료형은 iOS의 .iso8601 타입에서는 매칭이 불가능한 것이에요.
단순히 ISO8601을 따른다고 해서 무조건 변환되는 것이 아닌 것이죠.
문제 해결하기
문제가 되는 것이 decoder의 dateDecodingStrategy였기 때문에 당연히 이 부분을 변경해줘야겠죠?
방법은 여러 가지가 있겠지만 저는 아래와 같은 방법을 사용했어요.
let decoder = JSONDecoder()
let dateFormatter = DateFormatter().then {
$0.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.sssZ"
}
decoder.dateDecodingStrategy = .formatted(dateFormatter)
카카오 API에서 주어지는 타입과 완벽히 매칭 되는 구조로 dateFormat을 설정해줌으로써 해결했어요! :]
'iOS 앱개발 > iOS' 카테고리의 다른 글
[iOS] 시뮬레이터 없이 UI 확인하는 Preview 기능 만들기 (0) | 2022.01.03 |
---|---|
[iOS] 문자열에서 HTML 태그만 제거하기 (0) | 2022.01.03 |
[iOS] Custom UIColor 만들기 (0) | 2022.01.02 |
[iOS] - RxSwift 개념 이해하기_05 (0) | 2021.10.24 |
[iOS] - RxSwift 개념 이해하기_04 (0) | 2021.10.24 |
- Total
- Today
- Yesterday
- 반복수열#백준알고리즘#Python
- 터틀비치#리콘#xbox#controller
- Distinct#Codility#Python
- django
- 백준 알고리즘#BackTracking
- django#slicing
- 토마토#백준알고리즘#Python
- 종이자르기#분할정복#BOJ#Python
- 암호코드#dp#BOJ#Python
- 쿼드트리#BOJ#분할정복#Python
- PassingCars#Codility#Python
- 배열합치기#분할정복#BOJ#Python
- API#lazy#
- filter#isalnum#lower
- 섬의개수#백준알고리즘#Python
- Triangle#Sorting#Codility#Python
- 나무자르기#BOJ#이분탐색#Python
- 리모컨#완전탐색#BOJ#Python
- NumberofDiscIntersections#Codility#Sort#Python
- Brackets#Stacks and Queues#Codility#Python
- N으로 표현#DP#Programmers#Python
- 랜선자르기#이분탐색#BOJ#Python
- Swift#Tuples#Range
- 순열사이클#BOJ#Python
- 날짜 계산#BOJ#완전탐색#Python
- 병든 나이트#BOJ#탐욕법#Python
- 미로 탐색#백준알고리즘#Python
- 공유기 설치#BOJ#이분탐색#Python
- 텀 프로젝트#백준알고리즘#Python
- 파이썬알고리즘인터뷰#4장
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |