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