Search
Duplicate

Publisher / Subscriber

Created
2024/01/31 10:44
Tags
Combine

Publisher

→ Rx에서 Observable 역할
→ 이벤트를 보내는 역할
Publisher가 데이터를 내보낼때 데이터와 에러타입을 같이 제네릭 형태로 보내게 된다.
<이벤트 데이터, 에러 타입>
에러 타입이 Never 라면? → 어떠한 에러도 발생시키지 않는다.

Subscriber

→ Publisher을 구독하면
→ 해당 Publisher로부터 이벤트(데이터)를 받을 수 있다.
import Combine var myIntArrPublisher: Publishers.Sequence<[Int], Never> = [1, 2, 3].publisher // Output 이랑 failure 타입을 보내게 된다. Never는 failure 타입 중 하나 myIntArrPublisher.sink(receiveCompletion: { completion in switch completion { case .finished: print("완료") case .failure(let error): print("실패: error: \(error)") } }, receiveValue: { receivedValue in print("값을 받았다. : \(receivedValue)") }) var mySubscription: AnyCancellable? // Rx의 Disposable과 같다. var mySubscriptionSet: Set<AnyCancellable>() var myNotification = Notification.Name("com.ssfdf.customNotification") var myDefaultPublisher: Publisher = NotificationCenter.default.publisher(for: myNotification) // sink로 구독 mySubscription = myDefaultPublisher.sink(receiveCompletion: { completion in switch completion { case .finished: print("완료") case .failure(let erorr): print("실패 : error: \(error)") } }, receiveValue: { receivedValue in print("받은 값: \(receivedValue)") }) mySubscription?.store(in: &mySubscriptionSet) NotificationCenter.default.post(Notification(name: myNotification)) // KVO - Key Value Observing class MyFriend { var name = "철수" { didSet { print("name - didSet(): ", name) } } } var myFriend = MyFriend() // myFriend라는 객체 인스턴스를 만들고 var FriendSubscription: AnyCancellable = ["Teed"].publisher.assgin(to: \.name, on: myFriend) // Publisher을 생성하고 assgin을 통해 구독 // 출력 // name - didSet(): 영수
Swift
복사