Subscriber
A protocol that declares a type that can receive input from a publisher.
게시자로부터 입력을 받을 수 있는 형식을 선언하는 프로토콜입니다.
Subscriber는 공식문서에도 쓰여있듯 프로토콜 Subscriber를 채택받은 타입은 Publisher로 부터 방출된 값을 받을 수 있는 녀셕이 된다. 코드로 보면,
class CustemSubscriber: Subscriber {
typealias Input = String
typealias Failure = Never
func receive(subscription: Subscription) {
print("구독 시작")
subscription.request(.max(1))
}
func receive(_ input: String) -> Subscribers.Demand {
print("\(input)")
return .max(1)
}
func receive(completion: Subscribers.Completion<Never>) {
print("작업 완료", completion)
}
}
위 처럼 Subscriber 프로토콜을 체택하게 되면, 두 typealias와 3개의 receive 메서드를 구현해야 한다.
하나씩 정리해보면,
Input: 전달 받는 값의 타입이다.Failure: 에러 타입에 해당. 에러를 받지 않는 경우Neverreceive(subscription: Subscription):Publisher와Subscriber가 연결되면 호출되는 메서드,request를 통해 받을 수 있는 값의 수를 정해준다..unlimited: 제한 없음.max(n): 최대 n 개.none: 요청을 받지 않겠다.
receive(_ input: String) -> Subscribers.Demand: 받은input을 처리하는 로직및 추가로 요청을 받을 수를 리턴한다. (input이 들어올 때 마다 호출됨.)receive(completion: Subscribers.Completion<Never>): 요청이 끝나면 호출되는 메서드
let publisher = ["사자", "호랑이", "곰", "코끼리"].publisher
publisher.subscribe(CustemSubscriber())
/*
구독 시작
사자
호랑이
곰
코끼리
작업 완료 finished
*/
위 같은 방법으로 Subscriber 타입을 만들어 Publisher 통해 방출된 값을 받아 처리할 수 있다....
근데 이거 언제 만들고 있어???
그렇다 때문에, 애플은 Publisher의 sink이라는 메서드를 통해 위같이 Subscriber를 직접 만들지 않아도 되도록 구현해 놨다. 😅
'iOS&Swift' 카테고리의 다른 글
| Combine 뽀개기 4장: Scheduler (0) | 2023.07.26 |
|---|---|
| Combine 뽀개기 3장: Subject (0) | 2023.07.26 |
| Combine 뽀개기 1장: Publisher (0) | 2023.07.26 |
| Appearance사용해 NavigationBar 커스텀하기(iOS 13.0+) (0) | 2023.07.19 |
| [iOS] 한 방향으로 흐르는 ReactorKit 알아보기 (0) | 2023.03.14 |
