Swift Combine - Как получить Publisher, который доставляет события для каждого изменения символа текстового свойства UITextField - PullRequest
0 голосов
/ 11 марта 2020

Я заметил, что

textField.publisher(for: \.text)

доставляет события по окончании редактирования, но не для каждого изменения символа / редактирования. Как мне получить издателя, который отправляет четные записи для каждого изменения? В ReactiveSwift это будет

textField.reactive.continousTextValues()

А в RxSwift это будет просто ( Как вы получаете сигнал каждый раз, когда свойство текста UITextField изменяется в RxSwift )

textField.rx.text

Подходы, которые я выбрал:

  • проверка метода publisher(for:options:), но нет подходящих вариантов для желаемого результата.
  • добавление цели / действия textField.addTarget(self, action: #selector(theTextFieldDidChange), for: .editingChanged) ( Событие изменения текста UITextField )
  • выполняет практически то же самое, что и предыдущий шаг, подключая действие через конструктор интерфейса, что приводит к дополнительной работе и загроможденному коду.
  • Просмотр 2019 года WWD C видео о комбинате. Они не имели дело с текстовыми полями, но вместо этого использовали переменные @Published, скрывая, были ли значения на самом деле получены - (или я что-то пропустил?).

В настоящий момент я понятия не имею, как чтобы сделать это, и я чувствую тенденцию go вернуться к ReactiveSwift, но я хотел бы спросить вас, прежде чем сделать этот шаг назад.

Ответы [ 2 ]

1 голос
/ 12 марта 2020

К сожалению, Apple не добавила издателей для этого в UIKit, и поскольку UIControl не поддерживает KVO, издатель publisher(for:) работает не совсем так, как ожидалось. Если у вас все в порядке с добавлением зависимости в ваш проект, есть пара хороших издателей UIControl здесь .

В качестве альтернативы, вы можете реализовать своего собственного издателя, который делает это, или подписаться на текстовое поле. меняет старую школу.

1 голос
/ 11 марта 2020

Вы всегда можете создать собственный Publisher для своих нужд. Например, здесь я создал издателя TextField, который переносит действие textFieldDidChange для textField и отправляет строку после каждого введенного / удаленного символа! Пожалуйста, скопируйте ссылку, ТАК не анализирует ее:

https://github.com/DmitryLupich/Combine-UIKit/blob/master/CombineCustomPublishers/ ?% 20Publishers / TextFieldPubisher.swift

...