Codable 관련 질문 드립니다

안녕하세요. codable과 관련하여 질문이 있어 글을 올립니다.

  1. enum타입에 Codable을 선언해주었더니 ‘does not conform to protocol ‘Decodable’’ ‘does not conform to protocol ‘Encodable’’ 이 뜨면서 encode와 init(from decoder: Decoder) 함수를 넣으라하여 해당 함수를 넣었습니다. 그랬더니 self.init isn’t called on all paths before returning from initializer 오류가 나오는데 아무리 찾아봐도 어떻게 해결해야할지 알 수가 없네요… 무엇이 문제일까요…?
좋아요 4

enum 자체는 instance type 이 정의되어 있지 않으므로 codable 이 바로 적용될 수 없습니다.

그래서, Encodable 을 컨펌 해주기 위해서 encode 함수를,
Decodable 을 컨펌해주기 위해서 init(from decoder: Decoder) 를
stub 요청하게 되지만, 적절한 confirming 을 해줄 수 없게 됩니다.
(타입이 없으니까요.)

그럼 어떻게 해결해야 할까요?

두가지 정도로 접근 가능해 보입니다.

해당 json element 는 String 혹은 Int 일 겁니다.

이를 기반으로 enum의 type 을 포함한 codable 을 confirm 하거나,

// 문자열의 경우.
enum Foo: String, codable {

}

혹은 json 에 맞춰서 struct 혹은 class 구성 후, codable confirming 한 다음,

type 안에서 CodingKey 를 지정하고, encode 와 init 을 구현해서
멤버에 선언된 enum 에 값을 적절히 할당하거나 하시면 됩니다. :smile:

(enum 이 type 안의 멤버 변수로는 존재할 수 없으므로, 에러가 나니, CodingKey 를 통해서 parsing 에는 제외 시키고, 대신 그 값의 대응을 직접 구현해 주는 거죠.)

아래 링크를 참고해 보세요.

https://developer.apple.com/documentation/foundation/archives_and_serialization/encoding_and_decoding_custom_types

좋아요 4