Swift Couple - 为什么多播 + 连接不将所有值发送给订阅者

问题描述 投票:0回答:1

下面的代码中,为什么只打印了

-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
swift combine
1个回答
0
投票

connect
方法返回
AnyCancellable
,因此您也想将其存储在
cancelables
中:

multicastPublisher.connect()
    .store(in: &cancellables)
© www.soinside.com 2019 - 2024. All rights reserved.