2017-11-05 20 views
2

Codableクラスをカスタム初期化子にすべてのプロパティを入力せずにすべてのプロパティに対してdecodeIfPresentを使用するにはどうすればよいですか?Codableのすべてのプロパティに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つの変更を行う、自動的に作成された初期化子自分自身を複製したいと思います。

+1

ここで何を達成しようとしていますか?プロパティのデコードのショートカットなど? –

+0

@ItaiFerber理想的には、(与えられたクラス/構造体に対して)デフォルトでデフォルトを使うことを可能にする汎用的な解決策です。 'class Book:Codable、DecodableUsingDefaults {...} 'のようなものです。 – whistler

+1

ええ、それは現在可能ではありません。それぞれのプロパティを個別にデコードする必要があります。これは、現在Swiftで一般化することができないプロパティを設定する必要があるため、利用可能なキーを意味のある方法でループすることはできません。 –

答えて

0

明らかにこれは現時点では不可能です(スイフト4)。これは、Swiftが名前でプロパティを動的に設定することをサポートしていないためです。

関連する問題