【问题标题】:RxSwift: how to select one btn and unselect the rest? [duplicate]RxSwift:如何选择一个 btn 并取消选择其余的? [复制]
【发布时间】:2018-11-01 03:24:27
【问题描述】:

我有三个 btns,选择一个,其余两个取消选择。

下面的 RXSwift 代码不是很优雅。

twoBtn.isSelected = true

// the btns
let buttons = [oneBtn, twoBtn, threeBtn]

// find the selected btn we need
let selectedBtn : Observable<UIButton?> = Observable.from(buttons.map({ (button)  in
    return button!.rx.tap.map({
        return button
    })  
})).merge()


//  every btn subscribe to the selectedButton
for buttonPiece in buttons{
    selectedBtn.map { (btn) in
        return btn == buttonPiece
        }.bind(to: buttonPiece!.rx.isSelected).disposed(by: disposeBag)
}

BehaviorSubject 以一个初始值开始,它们会重播最新的值或初始值。

我认为 BehaviorSubject 在这里是合适的。

RxSwift 新手,如何做得更好?

【问题讨论】:

标签: rx-swift behaviorsubject


【解决方案1】:

定义一个State 结构,其中包含所有按钮的状态,使用.scan() 运算符修改它,如let state: Observable&lt;State&gt; = events.scan(State()) { oldState, event) -&gt; State in /* update and return state */ },并为每个按钮订阅它,如state.map { $0.button1state }

【讨论】:

  • 显示代码
猜你喜欢
  • 1970-01-01
  • 2020-03-05
  • 1970-01-01
  • 2020-05-23
  • 1970-01-01
  • 1970-01-01
  • 2015-03-10
  • 2018-08-29
  • 1970-01-01
相关资源
最近更新 更多