读芯术你应该知道的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. 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) 。
最后 , 计算出总收益:
本文插图
你学会了吗?
本文插图
留言点赞关注
我们一起分享AI学习与发展的干货
如转载 , 请后台留言 , 遵守转载规范
【读芯术你应该知道的5个Swift组合变换操作符】本文为***作者原创 , 未经授权不得转载
推荐阅读
- 教育|暑期教培市场“冷热不均” 家长应该这样选
- 悲剧!妈妈倒车时不慎撞死自己孩子 她应该负什么责任?
- 枝头的喜鹊|准大学生入学应该预备什么?只需这四样!
- 孔蒂|意甲名将炮轰孔蒂:张康阳是老板 你是雇员!应该向张总道歉
- 虎扑足球|兰帕德应该继续给他机会,旧将:凯帕有能力担任蓝军一门
- 直播吧|应该直接投三分的,利拉德谈最后时刻抢两分:我想太多了
- 易建联|虚惊一场?周鹏报平安透露应该问题不大:阿联亲口告诉他伤情
- 过往年少|在这样的环境里学电商模特,才应该是你想象中的样子吧
- 别今朝|这剧情应该不会再跑偏了吧!,小说:再遇小说中的情节套路
- 中超|中超应该放走的10大外援