在Swift Combine中使用Publishers.debounce()的正确语法是什么?

时间:2019-06-13 11:31:52

标签: swift swift5 combine

在Apple的2019年WWDC视频Swift Combine in Practice中,他们演示了如何使用debounce发布者来降低消息发送速度。

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

但是,每当我尝试以类似方式使用它时,都会出现以下错误:

  

不能使用类型为((for:Double,scheduler:RunLoop)')的参数列表调用'debounce'

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的经验不足。

正确的称呼方式是什么?

修改

this question...重复

目前,搜索“组合”等通用词颇具挑战性……

macOS 10.15,Xcode 11

1 个答案:

答案 0 :(得分: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)