我有一个产品$,它是Variable< [Product]>([]),并且有一个带有textfield的自定义单元格的tableview。我想要的是在模型更改时更新单元格,当文本字段更改时我想要更新我的模型。这就是我做的。
products$.asObservable()
.bind(to: self.tableViewCal.rx.items(cellIdentifier: "edittingCell")){ (row, product: Product, cell: CaloriesEdittingCell) in
cell.lblContentName.text = self.products$.value[row].name ?? ""
cell.textValue.text = "\(self.products$.value[row].price ?? 0)"
cell.textValue.rx.text
.map({ value -> Float in
return (value! as NSString).floatValue
})
.subscribe({value in
self.products$.value[row].price = value.element
print(product)
}).disposed(by: self.bag)
}.disposed(by: bag)
显然,它会陷入循环中。所以我做的是创建了另一个具有相同数据类型的tempProduct $,并将product $的值赋给tempProduct $。这是代码
tempProduct$.value = products$.value
tempProduct$.asObservable()
.bind(to: self.tableViewCal.rx.items(cellIdentifier: "edittingCell")){ (row, product: Product, cell: CaloriesEdittingCell) in
cell.lblContentName.text = self.products$.value[row].name ?? ""
cell.textValue.text = "\(self.products$.value[row].price ?? 0)"
cell.textValue.rx.text
.map({ value -> Float in
return (value! as NSString).floatValue
})
.subscribe({value in
self.products$.value[row].price = value.element
print(product)
}).disposed(by: self.bag)
}.disposed(by: bag)
它有效,但如果有更好的解决方案,请告诉我。提前谢谢。
答案 0 :(得分:0)
对于这类事情,更好的架构选择是遵循单向数据流原则。有关一般介绍,请参阅https://redux.js.org/docs/basics/DataFlow.html。使用RaspSwift的可能实现就像 -
{{1}}
显然,除了价格之外,你还可以在状态对象中存储很多其他东西。