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

时间:2019-11-22 17:17:46

标签: swift combine

UMap_y_bin

我在任何地方都找不到任何示例,documentation很平淡...免费的Using Combine书也没有什么有趣的。

1 个答案:

答案 0 :(得分:1)

在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))

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

byTimeOrCount带有一个附加的count参数,该参数对在将缓冲的集合发送给订户之前收集的项目数设置了上限。

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

let q = DispatchQueue(label: self.debugDescription)

let cancellable = publisher
    .collect(.byTimeOrCount(q, 1.0, 10))

您可以在Using Combine项目中看到正在使用的代码的更多特定示例,以及用于验证其运行方式的单元测试: