RxSwift 如何将“清除所有”UIButton 添加到简单的电子表格示例

Posted

技术标签:

【中文标题】RxSwift 如何将“清除所有”UIButton 添加到简单的电子表格示例【英文标题】:RxSwift How to add "clear all" UIButton to simple spreadsheet example 【发布时间】:2016-07-05 10:50:04 【问题描述】:

这是来自 RxSwift 存储库的简单电子表格代码(添加三个数字):

Observable.combineLatest(number1.rx_text, number2.rx_text, number3.rx_text)  textValue1, textValue2, textValue3 -> Int in
        return (Int(textValue1) ?? 0) + (Int(textValue2) ?? 0) + (Int(textValue3) ?? 0)
    
    .map  $0.description 
    .bindTo(result.rx_text)
    .addDisposableTo(disposeBag)

我想添加一个“全部清除”UIButton,这将导致三个框重置为零并且总数也设置为零。命令式风格,非常简单。

在 RxSwift 中添加这个按钮的正确方法是什么?

【问题讨论】:

【参考方案1】:

这是我想不到的几种方法。

命令式

button.rx_tap
    .subscribeNext  [weak self] _ in
        self?.number1.text = ""
        self?.number2.text = ""
        self?.number3.text = ""
    
    .addDisposableTo(disposeBag)

但是请注意,在您更改字段之间的焦点之前,这不会更新下面的 combineLatest Observable。我还没有调查原因。

使用Variables

// Declared as a property
let variable1 = Variable<String>("")

// Back down in `viewDidLoad`
number1.rx_text
    .bindTo(variable1)
    .addDisposableTo(disposeBag)

variable1.asObservable()
    .bindTo(number1.rx_text)
    .addDisposableTo(disposeBag)

button.rx_tap
    .subscribeNext  [weak self] _ in
        self?.variable1.value = ""
        // and other variables as well..
    
    .addDisposableTo(disposeBag)

Observable.combineLatest(variable1.asObservable(), ....

我省略了为variable2variable3 显示相同的代码,因为如果你走这条路,你可能应该创建一个双向绑定辅助方法。

【讨论】:

以上是关于RxSwift 如何将“清除所有”UIButton 添加到简单的电子表格示例的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 RxSwift disposeBag 防止 UITableViewCell 中重复的 UIButton 点击

将 3 个按钮的点击事件与 rxSwift 相结合

如何使用 RxCocoa 将图像设置为 UIButton

在 UICollectionViewCell 中为 UIButton 设置 rx.tap 的问题 - RxSwift 3

RxSwift之UI控件UIButton与UIBarButtonItem扩展的使用

RxSwift - rx.tap 不工作