RxSwift:如何 select 一个 btn 而 unselect 其余的?

RxSwift: how to select one btn and unselect the rest?

我有三个 btns,select 一个,select 剩下两个。

下面的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 新手,如何做得更好?

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