Combine 뽀개기 2장: Subscriber

2023. 7. 26. 19:46·iOS&Swift

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를 직접 만들지 않아도 되도록 구현해 놨다. 😅

저작자표시

'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
'iOS&Swift' 카테고리의 다른 글
  • Combine 뽀개기 4장: Scheduler
  • Combine 뽀개기 3장: Subject
  • Combine 뽀개기 1장: Publisher
  • Appearance사용해 NavigationBar 커스텀하기(iOS 13.0+)
Esiwon
Esiwon
iOS 개발 블로그
  • Esiwon
    시원한 코드 기록
    Esiwon
  • 전체
    오늘
    어제
    • 분류 전체보기 (70)
      • iOS&Swift (24)
      • git & github (1)
      • 코테 (41)
      • 네부캠 회고 (4)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • 깃허브
  • 공지사항

  • 인기 글

  • 태그

    회고
    BFS
    탐색
    PhotoKit
    구현
    Swift
    재귀
    ios
    photos
    이분탐색
    백준
    dfs
    완전탐색
    브루트포스 알고리즘
    코테
    챌린지
    알고리즘
    비동기
    다이나믹 프로그래밍
    그리디
    노드
    동시성
    Race Condition
    GCD
    코딩테스트
    네부캠
    Property wrapper
    photoUI
    Combine
    실버
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Esiwon
Combine 뽀개기 2장: Subscriber
상단으로

티스토리툴바