Какъв е правилният синтаксис за използване на Publishers.debounce() в Swift Combine?

Във видеоклипа Swift Combine in Practice на WWDC на Apple от 2019 г. те демонстрират използването на 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)


Операторът documented 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