Я новичок в RxSwift и сегодня сталкиваюсь с проблемой, которую не могу решить.Я хочу наблюдать за controlEvent
с в UITextField
.
Код:
textField.rx
.controlEvent([.editingDidEndOnExit, .editingDidEnd])
.subscribe(onNext: { [weak self] in
// do stuff
})
.disposed(by: disposeBag)
Я хочу сейчас, когда textField
подает в отставку, чтобы быть первым респондентом или пользователь нажимает на return
кнопкаКод работает нормально, когда я выполняю строку: textField.resignFirstResponder()
, но когда я нажимаю на кнопку return
, я получаю предупреждение:
was Обнаружена аномалия повторного входа.Отладка: для устранения этой проблемы вы можете установить точку останова в /Users/laxmorek/Documents/projects/meetingapplication-ios/Pods/RxSwift/RxSwift/Rx.swift:97 и наблюдать за стеком вызовов.Проблема: это поведение нарушает грамматику наблюдаемой последовательности.next (error | completed)?
Это поведение нарушает грамматику, потому что есть пересекающиеся события последовательности.Наблюдаемая последовательность пытается отправить событие до завершения отправки предыдущего события.Интерпретация: Это может означать, что в вашем коде есть какая-то неожиданная циклическая зависимость или что система не ведет себя ожидаемым образом.Помощь: Если это ожидаемое поведение, это сообщение может быть подавлено путем добавления .observeOn(MainScheduler.asyncInstance)
или путем чередования событий последовательности другим способом.
Я не понимаю этого.
- Как правильно наблюдать несколько
controlEvent
в RxSwift
? - Почему я получаю это предупреждение?Что не так с моей настройкой наблюдения?
Редактировать
Временное решение состоит в том, что я разделил свой код следующим образом:
textField.rx
.controlEvent(.editingDidEndOnExit)
.subscribe(onNext: { [weak self] in
self?.isSelected = false
})
.disposed(by: disposeBag)
textField.rx
.controlEvent(.editingDidEnd)
.subscribe(onNext: { [weak self] in
self?.isSelected = false
})
.disposed(by: disposeBag)
Но это дублирование кода невыглядят очень хорошо.: /