formattedOrderButtonText

formattedOrderButtonText

刚开始学习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)

10-08 05:22