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 }
。
我有三个 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 }
。