博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
RxSwift: 按钮来回点击
阅读量:7257 次
发布时间:2019-06-29

本文共 1132 字,大约阅读时间需要 3 分钟。

FRP 的常用例子,就是按钮监听输入框的文字。

几个按钮只有一个高亮,来回切换的情况下,就是给自己做事件绑定。

先合并信号,然后每个按钮都绑定那个信号。

代码如下:

let disposeBag = DisposeBag()    //  先强制拆包    let buttons = [oneBtn, twoBtn, threeBtn].map{ $0! }    // merge 出,最新的点击事件(信号)    let selectedButton = Observable.from(        buttons.map { button in button.rx.tap.map { button } }        ).merge()    //  每个按钮的状态,都绑定最新的信号    buttons.reduce(Disposables.create()) { disposable, button in            let subscription = selectedButton.map { $0 == button }            .bind(to: (button.rx.isSelected))            return Disposables.create(disposable, subscription)        }.disposed(by: disposeBag)复制代码

最后一段,reduce 比较难以理解。

把 reduce 展开,就是

Disposables.create(Disposables.create(Disposables.create(Disposables.create(), oneBtnSubscription), twoBtnSubscription), threeBtnSubscription)复制代码

换成循环,

var disposable = Disposables.create()    for button in buttons {        let subscription = selectedButton.map { $0 == button }        .bind(to: button.rx.isSelected)        disposable = Disposables.create(disposable, subscription)    }    // 最后交给线程安全的 DisposeBag, 自动释放内存    disposable.disposed(by: disposeBag)复制代码

参考:

转载地址:http://nyvdm.baihongyu.com/

你可能感兴趣的文章
【转】做好软件测试需要具备的思维方式
查看>>
【转】什么是互联网精神
查看>>
SVG图标
查看>>
【DOM编程艺术】图片库改进版
查看>>
关于app
查看>>
github访问方式,不定时失效
查看>>
Lucene关于实现Similarity自定义排序
查看>>
window alias给cmd命令起别名
查看>>
(翻译)如何对python dict 类型按键(keys)或值(values)排序
查看>>
TCP状态转换图
查看>>
easyui dialog遮罩层
查看>>
20155319 实验二 Java面向对象程序设计
查看>>
CPU UsageTimes Profile (cpu=times)
查看>>
uva-10382-贪心
查看>>
8086汇编——课堂笔记整理2
查看>>
硬盘第一次读写过慢问题
查看>>
OCP 12c 062题库大更新,出现大量新题-5
查看>>
BZOJ 1031: [JSOI2007]字符加密Cipher 后缀数组
查看>>
easyui tab页面关闭根据回调函数刷新父tab页
查看>>
php基础:遍历循环多为数组
查看>>