2017-12-27 27 views
0

最近、Decodableプロトコルを使用してJSONをモデルにパースしようとしていました。しかし今、私はRxSwiftを使って双方向バインディングを実装したいと思っています。swiftを使用する4 Decodable protocol with RxSwift

struct Person : Decodable 
{ 
    var batchcomplete = String() 
    var `continue` = Continue() 
    var query = Query() 
    var limits = Limit() 

    enum CodingKeys: String,CodingKey 
    { 
     case batchcomplete 
     case `continue` 
     case limits 
     case query 
    } 

    init(from decoder: Decoder) throws 
    { 
     let container = try decoder.container(keyedBy: CodingKeys.self) 

     batchcomplete = try container.decode(String.self, forKey: .batchcomplete) 
     `continue` = try container.decode(Continue.self, forKey: .`continue`) 
     limits = try container.decode(Limit.self, forKey: .limits) 
     query = try container.decode(Query.self, forKey: .query) 
    } 
} 

今、私は変数に文字列()からの私の「batchcomplete」、init()メソッドを変更した場合:。そのために私はここに私のモデルからの抜粋である「変数<>」型の変数を宣言する必要がありますエラーをスローする:

これらの変更を行うと、エラーが発生します。

var batchcomplete = Variable<String>("") 
batchcomplete = try container.decode(Variable<String>.self, forKey: .batchcomplete) 

答えて

2

はちょうどその値に設定... Variableに解読しようとしないでください :

batchcomplete.value = try container.decode(String.self, forKey: .batchcomplete) 

するか、また、あなたのインスタンス変数を宣言して、初期化に一度、それを初期化することができます:

let batchcomplete: Variable<String> 
batchcomplete = Variable<String>(try container.decode(String.self, forKey: .batchcomplete)) 

Variableに含まれる値を変更するため、Variableは定数(let)として宣言する必要があります。

+0

ありがとう:-) – Reckoner

関連する問題