刚开始学习 RxSwift。我觉得我应该有更好的方法来做到这一点:
View Controller :
viewModel.orderDate.asObservable()
.bind { [weak self] (date) in
self?.orderButton.setTitle(viewModel.formattedOrderButtonText, for: UIControl.State.normal)
}
.disposed(by: disposeBag)
View 模型:
var orderDate = Variable<Date?>(nil)
var formattedOrderButtonText: String {
get
{
let date = orderDate.value
if(date == nil)
{
return "String 1"
}
else
{
return "String 2"
}
}
}
有没有办法将按钮的标题绑定(bind)到格式化变量?
最佳答案
Variable
已弃用,可能会在未来的版本中删除,因此我使用 Relay
代替它。
更好的方法是在可观察序列的 map
中进行格式化并绑定(bind)到输出。
ViewModel
中的类似内容:
var orderDate = BehaviorRelay<Date?>(value: nil)
lazy var formattedOrderButtonText = orderDate.map { return $0 == nil ? "String 1" : "String 2" }
然后在 View Controller 中使用 formattedOrderButtonText
进行绑定(bind),如下所示:
viewModel.formattedOrderButtonText.bind(to: orderButton.rx.title).disposed(by: disposeBag)
关于ios - RxSwift 绑定(bind)到变量的格式化值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54268797/