2017-12-27 249 views
0

我最近试图使用可解码协议将JSON解析为模型,并且我已成功完成该任务。但是现在我想用RxSwift实现双向绑定。为此,我需要声明类型的变量的变量<>“这里是我的模型片段:使用swift 4可解码协议和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()方法引发错误:

No 'decode' candidates produce the expected contextual result type 'Variable<String>'. 

进行这些更改,您将收到错误消息。

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应该声明为常量(let),因为您更改了Variable中包含的值。

+0

非常感谢:-) – Reckoner