下面的代码中,为什么只打印了
-1
,而不打印了1/2/3
import Foundation
import Combine
import PlaygroundSupport
PlaygroundPage.current.needsIndefiniteExecution = true
var cancellables = Set<AnyCancellable>()
let upstreamPublisher = Range(1...3).publisher.delay(for: 1, scheduler: DispatchQueue.main)
let sharedSubject = CurrentValueSubject<Int, Never>(-1)
// Create a multicast publisher and apply autoconnect
let multicastPublisher = upstreamPublisher
.multicast({
print("debug: multicast triggered..")
return sharedSubject
})
// Subscriber 1
multicastPublisher
.sink { value in
print("Subscriber 1 received value: \(value)")
}
.store(in: &cancellables)
// Subscriber 2
multicastPublisher
.sink { value in
print("Subscriber 2 received value: \(value)")
}
.store(in: &cancellables)
multicastPublisher.connect()
// Output
//debug: multicast triggered..
//Subscriber 1 received value: -1
//Subscriber 2 received value: -1
connect
方法返回 AnyCancellable
,因此您也想将其存储在 cancelables
中:
multicastPublisher.connect()
.store(in: &cancellables)