Tech
Codable 여러 타입 지원하기 (는 사실상 String)
가루군#
2020. 12. 17. 10:35
제곧내고...
Codable 을 이용하면 json -> struct 편하게 할수있다 그렇긴한데
내가 편한거지 서버에서 주는 값이 다르면 난해한 케이스가 발생한다
예를들어
key을 Int로 줄수도있고 String으로 줄수도있고 안드릴수도 있습니다.
이러면 음~~~...
Codable 은 타입을 지정해줘야하다보니 (물론 찾아보니 AnyType되는 라이브러리 만들긴했더라..) 대충 이렇게 기본적으로 쓰는데
struct Sample: Codable {
var key: String?
}
이 구조에 key에 Int 넣으면 터진다
펑~
struct Sample: Codable {
var key: String?
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
if let _str = try? values.decode(String.self, forKey: .key) {
key = _str
}
else if let _int = try? String(values.decode(Int.self, forKey: .key)) {
key = String(_int)
}
else {
key = nil
}
}
enum CodingKeys: String, CodingKey {
case key
}
}
이렇게 써주면 되긴한다. (난 안드릴 수도 있습니다. 가 있어서 nil처리했지만 key에 optional 처리 안할꺼면 throw 으로 터트리자)
물론 제일 좋은건 서버에서 여러 케이스 줄꺼면 걍.... string 으로만 주면 고맙겠습니다...