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 },

Другие вопросы по тегам