2017-11-05 6 views
2

사용자 정의 초기화 프로그램에서 모든 속성을 입력 할 필요없이 Codable 클래스를 모든 속성에 대해 decodeIfPresent으로 사용하려면 어떻게해야합니까?codode의 모든 속성에 decodeIfPresent를 사용하는 방법은 무엇입니까?

예 :

class Book: Codable { 
    var name: String = "Default name" 
    var pages: Int = 1 

    required init(from decoder: Decoder) throws { 
     let container = try decoder.container(keyedBy: CodingKeys.self) 
     for key in container.allKeys { 
      // What to do here to call decodeIfPresent? 
     } 
    } 
} 

본질적으로, 나는 그것이 작동하는 방법이 하나의 변화를 만드는 자동으로 생성 초기화 나 자신을 복제하고 싶습니다.

+1

여기에서 달성하려는 것은 무엇입니까? 속성을 디코딩하는 단축키 또는 다른 것? –

+0

@ItaiFerber 이상적으로, 디폴트로 (적어도 주어진 클래스/구조체에 대해) 기본값을 사용할 수있는 제네릭 솔루션. 'class Book : Codable, DecodableUsingDefaults {...} '와 같은 것입니다. – whistler

+1

알았습니다. 그래, 그건 현재 가능하지 않다. 각 속성을 개별적으로 디코딩해야합니다. 현재 스위프트에서 일반화 할 수없는 속성을 설정해야하기 때문에 의미있는 방법으로 사용 가능한 키를 반복 할 수 없습니다. –

답변

0

지금은 불가능합니다 (Swift 4). 이는 Swift가 이름으로 속성을 동적으로 설정하는 것을 지원하지 않기 때문입니다.