Какой правильный синтаксис для использования Publishers.debounce () в Swift Combine? - PullRequest
1 голос
/ 13 июня 2019

В видео Apple WWDC 2019 года Swift Combine in Practice они демонстрируют использование издателя debounce для снижения скорости сообщений.

return $username
  .debounce(for: 0.5, scheduler: RunLoop.main)
  .removeDuplicates()
  .eraseToAnyPublisher()

Однако всякий раз, когда я пытаюсь использовать его подобным образом, я получаю следующую ошибку:

Невозможно вызвать 'debounce' со списком аргументов типа '(for: Double, планировщик: RunLoop) '

Сигнатура debounce():

public func debounce<S>(for dueTime: S.SchedulerTimeType.Stride, 
                          scheduler: S,
                            options: S.SchedulerOptions? = nil) -> 
                                    Publishers.Debounce<Self, S> where S : Scheduler

SchedulerTimeType.Stride кажется инициализируемой с помощью числа, но она не работает для меняили моя неопытность с Swift Generics демонстрируется.

Как правильно это назвать?

Редактировать

Дубликат этого вопроса ...

Поиск общих слов, таких как "Объединить", пока что, довольно сложный ...

macOS 10.15, Xcode 11

1 Ответ

1 голос
/ 20 июня 2019

Документированный оператор debounce<S> принимает тип S.SchedulerTimeType.Stride, который выглядит примерно так:

let sub = NotificationCenter.default
    .publisher(for: NSControl.textDidChangeNotification, object: filterField)
    .debounce(for: .milliseconds(500), scheduler: RunLoop.main)
    .subscribe(on: RunLoop.main)
    .assign(to:\MyViewModel.filterString, on: myViewModel)
...