PassThroughSubject
•
초기값이 없다.
밖에서 값을 발행할 수 있다.
•
명령형 코드를 Combine 코드로 이어주는 역할
이렇게 발행된 값은 Subject 를 구독한 모든 Subscriber 에게 전달된다.
발행된 값은 현재 값으로 세팅된다.
example(of: "PassthroughSubject") {
enum MyError: Error {
case test
}
final class StringSubscriber: Subscriber {
typealias Input = String
typealias Failure = MyError
func receive(subscription: Subscription) {
subscription.request(.max(2))
}
func receive(_ input: String) -> Subscribers.Demand {
print("Received value", input)
return input == "World" ? .max(1) : .none
}
func receive(completion: Subscribers.Completion<MyError>) {
print("Received completion", completion)
}
}
// 4
let subscriber = StringSubscriber()
}
Swift
복사
CurrentValueSubject
PassThroughSubject 와 대부분의 기능이 동일
•
초기값 존재 → 구독과 동시에 초기값 발행.
•
값을 할당하듯이 사용 가능
var subscriptions = Set<AnyCancellable>()
let subject = CurrentValueSubject<Int, Never>(0)
subject
.sink(receiveValue: { print($0) })
.store(in: &subscriptions)
subject.value = 3 // 값을 할당하는 것 처럼 사용이 가능하다
subject.value = .finished // 🚨 컴파일에러 !
Swift
복사