ios - RxSwift 绑定(bind)到变量的格式化值

标签 ios swift viewmodel rx-swift

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

相关文章:

ios - PerformFetch后fetchedObjects为nil,但tableView有数据

ios - AVPlayer 直播电台流媒体在 15 分钟左右后停止

ios - 如何使用 SFAuthenticationSession 注销

android - 如何生成具有临时 subview 的组合 View 模型?

asp.net-mvc - 以列表形式显示 View 中多个表中的数据-ASP.Net MVC

MVVM ViewModel 和模型职责 (WPF)

ios - MPMoviePlayerController - 检测按下 Next/Prev 按钮

ios - 如何将 Storyboard链接到 View Controller

swift - 在 Swift 中使用选择器有什么理由吗?

swift - 单击第二个选项卡时选项卡栏不起作用