Какой правильный синтаксис для использования Publishers.debounce() в Swift Combine?

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

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

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

Невозможно вызвать 'debounce' со списком аргументов типа '(для: Double, scheduler: 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 ответ

Решение

Документированный 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)
Другие вопросы по тегам