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
복사