刚开始学习RxSwift。我觉得应该有一种更好的方法可以做到这一点:
ViewController:
viewModel.orderDate.asObservable()
.bind { [weak self] (date) in
self?.orderButton.setTitle(viewModel.formattedOrderButtonText, for: UIControl.State.normal)
}
.disposed(by: disposeBag)
ViewModel:
var orderDate = Variable<Date?>(nil)
var formattedOrderButtonText: String {
get
{
let date = orderDate.value
if(date == nil)
{
return "String 1"
}
else
{
return "String 2"
}
}
}
有什么办法可以将按钮的标题绑定到格式化变量?
最佳答案
Variable
已被弃用,并且可能在将来的版本中删除,因此我用Relay
代替了它。
更好的方法是将格式设置为可观察序列的map
并绑定到输出。
在ViewModel
中是这样的:
var orderDate = BehaviorRelay<Date?>(value: nil)
lazy var formattedOrderButtonText = orderDate.map { return $0 == nil ? "String 1" : "String 2" }
然后在视图控制器中使用
formattedOrderButtonText
进行绑定,如下所示:viewModel.formattedOrderButtonText.bind(to: orderButton.rx.title).disposed(by: disposeBag)