在 Swift Combine 中使用 Publishers.debounce() 的正确语法是什么?
What is the correct syntax for using Publishers.debounce() in Swift Combine?
在 Apple 的 2019 年 WWDC 视频 Swift Combine in Practice
中,他们演示了使用 debounce
发布者来降低消息速率。
return $username
.debounce(for: 0.5, scheduler: RunLoop.main)
.removeDuplicates()
.eraseToAnyPublisher()
但是,每当我尝试以类似方式使用它时,都会收到以下错误:
Cannot invoke 'debounce' with an argument list of type '(for: 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 泛型缺乏经验。
正确的称呼方法是什么?
编辑
this question...
的副本
目前,搜索像 "Combine" 这样的通用词是相当具有挑战性的...
macOS 10.15,Xcode11
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)
在 Apple 的 2019 年 WWDC 视频 Swift Combine in Practice
中,他们演示了使用 debounce
发布者来降低消息速率。
return $username
.debounce(for: 0.5, scheduler: RunLoop.main)
.removeDuplicates()
.eraseToAnyPublisher()
但是,每当我尝试以类似方式使用它时,都会收到以下错误:
Cannot invoke 'debounce' with an argument list of type '(for: 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 泛型缺乏经验。
正确的称呼方法是什么?
编辑
this question...
的副本目前,搜索像 "Combine" 这样的通用词是相当具有挑战性的...
macOS 10.15,Xcode11
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)