如何在组合中使用collect(.byTime)或collect(.byTimeOrCount)

Myc*_*ner 2 swift combine

publisher.collect(<#T##strategy: Publishers.TimeGroupingStrategy<Scheduler>##Publishers.TimeGroupingStrategy<Scheduler>#>)
Run Code Online (Sandbox Code Playgroud)

我在任何地方都找不到任何示例,而且文档也很乏味...免费的《使用组合》一书也没有什么有趣的。

hec*_*ckj 9

在 Xcode 11.3 中,补全效果不太好,但格式并不太复杂。TimeGroupingStrategy枚举中发布了两个选项(从 iOS 13.3 开始):

  • byTime
  • byTimeOrCount

当您指定任一策略时,您还需要指定它运行的调度程序,这是这些枚举情况的参数之一。

例如,要使用 DispatchQueue 按时间收集(收集间隔为 1.0 秒),您可以使用:

let q = DispatchQueue(label: self.debugDescription)

let cancellable = publisher
    .collect(.byTime(q, 1.0))
Run Code Online (Sandbox Code Playgroud)

byTime版本将在上游发布者提供的缓冲值中指定的时间间隔内使用无限量的内存。

byTimeOrCount采用一个附加count参数,该参数在将缓冲集合发送给订阅者之前设置收集的项目数量的上限。

例如,最大缓冲区大小为 10 项的相同代码:

let q = DispatchQueue(label: self.debugDescription)

let cancellable = publisher
    .collect(.byTimeOrCount(q, 1.0, 10))
Run Code Online (Sandbox Code Playgroud)

您可以在使用组合项目中查看正在使用的代码的更具体示例以及验证它们如何运行的单元测试: