Вы можете использовать комбинацию skip
, debounce
и distinctUntilChanged
для достижения этого:
aSwitch.rx.isOn
.skip(1) // 1
.debounce(1, scheduler: MainScheduler.instance) // 2
.distinctUntilChanged() // 3
.subscribe(onNext: { isOn in
print("IS ON: \(isOn)")
})
.disposed(by: disposeBag)
Небольшое объяснение:
// 1: Это предотвращает излучение коммутатором своего начального значения. Вы можете удалить это, если вам нужно начальное значение UISwitch
// 2: ожидание до тех пор, пока UISwitch
не изменит свое значение в течение как минимум 1 секунды, прежде чем выдать новое значение
// 3: отфильтровывает значения, которые не изменились. Таким образом, значение не выдается, если после одной секунды бездействия значение переключателя остается таким же, как до того, как пользователь начал изменять значение.