首页 > 解决方案 > 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

标签: swiftcombine

解决方案


推荐阅读