在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的经验不足。
正确的称呼方式是什么?
修改
目前,搜索“组合”等通用词颇具挑战性……
macOS 10.15,Xcode 11
答案 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)