iOS Multiple types in decode

운영 체제: macOS Ventura 13.0.1
사용 버전: Xcode 14.1, Swift

iOS Multiple tyipes in decode를 알아보겠습니다.

원래라면 서버에서 같은 타입의 데이터를 Json으로 보내줘야 하는데, 공공 API를 사용하다 보면, 이상하게 오류가 발생합니다. 그래서 들여다보면 타입이 자기 멋대로 달라지는 것을 볼 수 있습니다. 난감합니다. 실제 서버 담당자를 만날 수 있다면 수정해 달라고 요청하면 되지만, 공공 API의 경우 아마 접촉하기가 힘들 겁니다. 그냥 우리가 맞춰 줘야죠....

아래는 어떤 API의 응답 Json입니다. routeno가 Int 형태인 걸 볼 수 있습니다.







하지만, 아래를 보시죠. 같은 API인데 이번엔 String 형식으로 옵니다. 이럴 거면 그냥 처음부터 String으로 보내지. 답답하네요.








API 응답을 위한 Struct 들을 만들어 줍니다.

모르겠으면 아래 게시글을 참고해 주세요.






우리는 47 번째 줄에서 routeno: Int를 수정할 겁니다.









파일을 하나 만듭니다.

File - New - File...을 누릅니다.








Swift File을 선택합니다.








적당한 이름으로 하나 만듭니다.








enum으로 하나 만듭니다. 그리고 Decodable을 상속받습니다.







Init을 만듭니다.

container를 불러오고, container로 각각 모든 타입을 try로 실행합니다.

Return 값은 해당 타입의 case로 반환합니다.









아래에 stringValue라는 변수를 만들어서 switch로 해당 타입에 따라 String으로 변환해서 보내면 됩니다.







처음으로 돌아와서 47 번째 줄에 우리가 만든 RouteNoMultiType을 입력합니다.







그러면 문제없이 잘 받아와집니다.


불러오는 건 routeno를 부른 다음에 내부 변수 stringValue를 부르면 String으로 값을 보내줍니다.






끝.



카테고리: iOS

댓글

이 블로그의 인기 게시물

Python urllib.parse.quote()

Python OpenCV 빈 화면 만들기

tensorflow tf.random.uniform()

Android Notification with Full Screen

KiCad 시작하기 2 (PCB 만들기)

Android Minimum touch target size

Python bs4.SoupStrainer()

KiCad 시작하기 4 (기존 회로도 수정 및 추가)

음악 총보(Score), 파트보(Part)

tensorflow tf.expand_dims()