Publisher와 Subscriber연결

퍼블리셔의 요소들을 받기위해 서브스크라이버를 사용한다. subscriber는 Input(associated Type)을 정의하고 있음. 또한 퍼블리셔는 Output을 정의함으로서 어떤 이벤트를 방출할지 선언한다. 퍼블리셔와 서브스크라이버는 그들이 받거나 전달할 에러를 명시하기 위해 Failure타입을 정의함. Input과 OutPu타입은 일치해야 하고 서브스크라이버와 퍼블리셔의 Error타입 또한 일치해야함.

Sink, Assign - Built in Subscribers

  1. sink(receiveCompletion: receiveValue) 2개의 클로저를 파라메터로 입력받는다. 첫번째 클로저는 Subscribers.competion을 받았을때 실행됨. 퍼블리셔가 일반적으로 종료됬는지 실패했는지 알기위해 사용됨. 두번째 클로저는 퍼블리셔가 엘리먼트를 방출했을때 실행됨.
  2. assign(to:on:) 즉시적으로 모든 엘리멘트를 할당한다. 객체의 Key-path를 사용해 프로퍼티를 사용해

예시)

let sub = NotificationCenter.default
    .publisher(for: NSControl.textDidChangeNotification, object: filterField)
    .sink(receiveCompletion: { print ($0) },
          receiveValue: { print ($0) })

구독 취소

서브스크라이브 타입은 sink, assing으로 생성되는데 이둘 모두 Cancellable프로토콜을 채택하기 때문에 Cancel메소드를 통해 구독을 취소 할 수 있음.