2017-09-24 8 views
2

빈 문자열 또는 int 일 수있는 코드 가능 구조체의 필드를 JSON에서 어떻게 처리합니까? 나는 데이터 타입을 사용하려고 시도했으나 codable을 따르지 않았다. 나는 값이 없다면 빈 문자열을 리턴하거나 그렇지 않으면 int를 리턴한다고 생각한다. Swift 4와 XCode 9를 사용하고 있습니다. 사전에 감사드립니다.빈 문자열 또는 int 일 수있는 코딩 가능 JSON 필드를 어떻게 디자인합니까?

+0

스위프트 유형에서이 필드의 유형은 무엇입니까? 'Int? ' –

+0

예, 해당 필드에 int를 사용하고 싶습니다. 빈 문자열이라면 가능하면 0으로 기본값을 설정하고 싶습니다. –

답변

2

정말 일관되게 값을 반환하도록 웹 서비스를 변경하는 것이 좋습니다 (정수 유형의 값이없는 경우 해당 키에 대해 아무 것도 반환하지 않음).

하지만이 디자인으로 문제가 발생하면 정수 값을 구문 분석하지 못하도록 정상적으로 처리하는 init(from:)을 작성해야합니다. 예컨대 :

struct Person: Codable { 
    let name: String 
    let age: Int? 

    init(from decoder: Decoder) throws { 
     let values = try decoder.container(keyedBy: CodingKeys.self) 
     name = try values.decode(String.self, forKey: .name) 
     do { 
      age = try values.decode(Int.self, forKey: .age) 
     } catch { 
      age = nil 
     } 
    } 

} 

나는 또한 "제공 없음 정수 값"에 대한 감시 값으로 0를 사용하여 무리를 줄 것입니다. 이것이 선택자들이하는 것입니다.

+1

도움 주셔서 감사합니다. 서버를 변경할 수있는 권한이 없기 때문에 먼 길을 가야 할 것입니다. –

+0

권. 그래, 우리는 모두 거기에 있었고, 다른 사람들이 관리하는 의심스런 인터페이스에 매여 있었다. – Rob