RxSwift: как выбрать один btn и отменить выбор остальных?
У меня есть три 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 начинается с начального значения, и они будут воспроизводить последнее значение или начальное значение.
Я думаю, что Поведение субъекта здесь правильно.
новичок в RxSwift, как это сделать лучше?
1 ответ
Определить State
структура с состоянием всех кнопок в нем, изменить его с помощью .scan()
оператор как let state: Observable<State> = events.scan(State()) { oldState, event) -> State in /* update and return state */ }
и подписать каждую кнопку, как это state.map { $0.button1state }
,