读芯术你应该知道的5个Swift组合变换操作符( 二 )


于是我们得到了想要的结果:
读芯术你应该知道的5个Swift组合变换操作符
本文插图
注意 , 发布者必须发出.completed事件才能实现这个操作 , 因为.collect会一直等待 , 直到所有元素都发出并且发布者完成操作为止 。 例如 , 如果使用PassthroughSubject , 需要在发送所有元素后发送.finished事件:
funccollectExample { let integerPublisher =PassthroughSubject<Int, Never> integerPublisher .collect .sink(receiveValue: { print($0) }) .store(in: &subscriptions) integerPublisher.send(1) integerPublisher.send(4) integerPublisher.send(5) integerPublisher.send(12) integerPublisher.send(24) integerPublisher.send(44) integerPublisher.send(completion: .finished) }
4. flatMap
.flatMap操作符允许我们将给定的发布者转换为另一个发布者 。 来看看它是如何将观察结果从Network更改为isAvailable主题:
funccollectExample { let integerPublisher =PassthroughSubject<Int, Never> integerPublisher .collect .sink(receiveValue: { print($0) }) .store(in: &subscriptions) integerPublisher.send(1) integerPublisher.send(4) integerPublisher.send(5) integerPublisher.send(12) integerPublisher.send(24) integerPublisher.send(44) integerPublisher.send(completion: .finished) }
当更改它的值时 , 我们要打印出isAvailable值 。 首先 , 它打印初始值(正在使用CurrentValueSubject) , 一旦为其分配了新值 , 就会发生以下情况:
读芯术你应该知道的5个Swift组合变换操作符
本文插图
5. scan
.scan操作符能够在闭包中公开当前发出的值以及最新的值 。 可以使用它来累积值并打印总结果:
funcflatMapExample { structNetwork { let title:String let isAvailable =CurrentValueSubject<Bool, Never>(false) } let wifi =Network(title: "Wi-Fi") let networkSubject = CurrentValueSubject<Network, Never>(wifi) networkSubject .flatMap ({ return$0.isAvailable }) .sink(receiveValue: { print("Is networkenabled: \($0)") }) .store(in: &subscriptions) wifi.isAvailable.value=http://news.hoteastday.com/a/true wifi.isAvailable.value=false }
在这里 , 执行的是以下操作:
· 创建收益数组(下划线是将数字中的千单位分开的好方法) 。
· 创建这些收益的发布者 。
· 使用.scan操作符 , 将当前发出的值($0)添加到从零开始的最新值($1) 。
最后 , 计算出总收益:
读芯术你应该知道的5个Swift组合变换操作符
本文插图
你学会了吗?
读芯术你应该知道的5个Swift组合变换操作符
本文插图
留言点赞关注
我们一起分享AI学习与发展的干货
如转载 , 请后台留言 , 遵守转载规范
【读芯术你应该知道的5个Swift组合变换操作符】本文为***作者原创 , 未经授权不得转载


推荐阅读