티스토리 뷰
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
: 에러 타입에 해당. 에러를 받지 않는 경우Never
receive(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
를 직접 만들지 않아도 되도록 구현해 놨다. 😅
'Swift' 카테고리의 다른 글
Combine 뽀개기 4장: Scheduler (0) | 2023.07.26 |
---|---|
Combine 뽀개기 3장: Subject (0) | 2023.07.26 |
Combine 뽀개기 1장: Publisher (0) | 2023.07.26 |
[Swift] Swift Concurrency와 GCD (1) | 2022.12.14 |
[Swift] Race Condition과 Thread Safe (0) | 2022.12.12 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 회고
- 코딩테스트
- Swift
- 재귀
- GCD
- 네부캠
- 구현
- 실버
- ios
- 탐색
- 다이나믹 프로그래밍
- 백준
- 완전탐색
- 브루트포스 알고리즘
- 이분탐색
- photos
- 동시성
- 챌린지
- BFS
- 알고리즘
- Race Condition
- dfs
- Combine
- 그리디
- photoUI
- 비동기
- 코테
- 노드
- Property wrapper
- PhotoKit
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
글 보관함