multicast 는 업스트림 Publisher로부터 발행되는 데이터 스트림을 여러 Subscriber들에게 공유하고자 할 때 사용되는 Operator에요.
share 과 비슷하지만 다른 점이 있어요.
let expensiveNetworkRequestPublisher = Timer.publish(every: 1.0, on: .main, in: .common)
.autoconnect()
.prefix(3)
.map { _ in Int.random(in: 1...100) }
let multicastPublisher = expensiveNetworkRequestPublisher
.multicast(subject: PassthroughSubject<Int, Never>())
let subscription1 = multicastPublisher
.sink(receiveValue: { print("Subscriber 1 received: \\($0)") })
let subscription2 = multicastPublisher
.sink(receiveValue: { print("Subscriber 2 received: \\($0)") })
// 데이터 스트림 발행 시작
let cancellable = multicastPublisher.connect()
// 결과
Subscriber 1 received: 77 (1...100 랜덤 값)
Subscriber 2 received: 77
Subscriber 1 received: 72 (1...100 랜덤 값)
Subscriber 2 received: 72
Subscriber 1 received: 96 (1...100 랜덤 값)
Subscriber 2 received: 96