swift - shared() 运算符超时
问题描述
在以下代码中,sub1 和 sub2 一个接一个地订阅共享增量发布者,然后都取消。后来 sub3 订阅了发布者,但它现在根本没有收到任何值。我如何添加超时,以便 sub3 只要在超时到期之前订阅就可以接收值?
import Combine
import Foundation
import PlaygroundSupport
PlaygroundPage.current.needsIndefiniteExecution = true
let everySecPublisher = Timer.TimerPublisher(interval: 1.0, runLoop: .main, mode: .default).autoconnect()
let incrementPublisher = everySecPublisher.scan(0, {x, _ in x + 1})
let shared = incrementPublisher.share()
let sub1 = shared.sink(receiveValue: { value in print("1:\(value)") })
RunLoop.main.run(until: Date(timeIntervalSinceNow: 2))
let sub2 = shared.sink(receiveValue: {value in print("2:\(value)") })
RunLoop.main.run(until: Date(timeIntervalSinceNow: 2))
sub1.cancel()
sub2.cancel()
let sub3 = shared.sink(receiveValue: {value in print("3:\(value)") })
RunLoop.main.run(until: Date(timeIntervalSinceNow: 2))
print("finished")
输出
1:1
1:2
1:3
2:3
1:4
2:4
finished
解决方案
推荐阅读
- computer-vision - 访问图像子区域
- sympy - 我在哪里可以找到 sympy 代码以供参考
- java - 删除具有特定键的所有数据库条目
- go - 聊天系统中的 Go (Golang) 高效逻辑处理
- python - 查找列中的下一个更改
- latex - 文本之间的巨大间距
- ruby-on-rails - 缓存多租户 APP 上的架构,架构来自单租户 APP (ROR)
- typescript - Sentry 不使用 vuejs 项目的 sourcemap
- android - 收听 PROXIMITY_SCREEN_OFF_WAKE_LOCK
- python - 这个函数应该返回一些东西,但它不是,