Ios 合并框架第三个“collect”方法
在iOS 13 Combine框架中,有三种Ios 合并框架第三个“collect”方法,ios,ios13,combine,Ios,Ios13,Combine,在iOS 13 Combine框架中,有三种collect操作符方法。前两个很明显,但第三个使用的类型我不清楚 collect(_:options:) func collect(u策略:publisher.TimeGroupingStrategy, 选项:S.SchedulerOptions?=nil) ->出版商。收藏时间 其中S:调度程序 有人能举一个例子说明如何调用这个方法吗?经过一番努力,我想出了这样一个例子: let t = Timer.publish(every: 0.4,
collect
操作符方法。前两个很明显,但第三个使用的类型我不清楚
collect(_:options:)
func collect(u策略:publisher.TimeGroupingStrategy,
选项:S.SchedulerOptions?=nil)
->出版商。收藏时间
其中S:调度程序
有人能举一个例子说明如何调用这个方法吗?经过一番努力,我想出了这样一个例子:
let t = Timer.publish(every: 0.4, on: .main, in: .default)
t
.scan(0) {prev,_ in prev+1}
.collect(.byTime(DispatchQueue.main, .seconds(1))) // *
.sink(receiveCompletion: {print($0)}) {print($0)}.store(in:&storage)
let cancellable = t.connect()
delay(3) { cancellable.cancel() }
(其中,存储
是通常的设置
以使订户保持活动状态)
输出为:
[1, 2]
[3, 4, 5]
[6, 7]
因此,我们大约每0.4秒发布一个新的数字,但是
collect
仅每1秒发布一次。因此,前两个值到达,发布1
和2
,然后collect
完成它的工作,累计到目前为止到达的所有值,并将它们作为数组发布,[1,2]
。等等每秒钟,到目前为止,管道中的任何内容都会累积到一个数组中并作为数组发布。两个TimeGroupingStrategy机制在该枚举中发布。截至iOS 13.3,仍然只有两个:
byTime
byTimeOrCount
byTime
中,它将在指定的时间间隔内收集并缓冲接收到的尽可能多的元素(使用无限量的内存)。byTimeOrCount
将限制缓冲到特定计数的项目数量
指定这些的两种方法是:
let q=DispatchQueue(标签:self.debugDescription)
出版商
.collect(.byTime(q,1.0))
或
let q=DispatchQueue(标签:self.debugDescription)
出版商
.collect(.byTimeOrCount(q,1.0,10))
它们使用DispatchQueue,但您也可以轻松地使用任何其他调度器。
如果你只是在跨步中通过一个双人,它会以秒为单位将其作为一个值
在这两种情况下,当时间(或计数,如果指定了该版本)结束时,操作员将依次向其订阅者发布一个收集值的数组
[1, 2]
[3, 4, 5]
[6, 7]