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

В видеоролике WWDC от Apple за 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


person kennyc    schedule 13.06.2019    source источник
comment
Также здесь сообщается: stackoverflow.com/q/56564967/1187415. - По-видимому, это еще не реализовано в текущей бета-версии.   -  person Martin R    schedule 13.06.2019


Ответы (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)
person chris stamper    schedule 20.06.2019
comment
Спасибо. Я думаю, что исходная проблема заключалась в том, что Xcode 11 beta 1 не поддерживал аргумент scheduler. В примечаниях к выпуску бета-версии 2 он теперь указан как поддерживаемый. Первоначальная ошибка была связана с недопустимым аргументом scheduler, а не с интервалом, но в то время мне это было не ясно. - person kennyc; 20.06.2019
comment
плюс большая часть кода на экране WWDC фактически не компилируется - они, как правило, берут на себя большую творческую свободу при создании слайдов. - person chris stamper; 20.06.2019