티스토리 뷰

Combine

Combine (2) - Subject

Zedd0202 2020. 2. 29. 13:29
반응형

 

안녕하세요 :) Zedd입니다.

https://zeddios.tistory.com/925

 

Combine (1) - Publisher, Subscriber

안녕하세요 :) Zedd입니다. 이번 휴가동안 SwiftUI를 좀 해볼라하는데 Combine모르면 이거 걍 노답임.... -> 휴가 끝나버렸죠? 2020년 되버렸죠??????;; 그래서 Combine공부.. Combine Combine이 너무 핫했어서....

zeddios.tistory.com

Combine의 Publisher와 Subscriber를 공부해봤는데요,

 

  • Publisher

  • Subscriber

  • Subject 

  • Scheduler 

  • Cancellable

그럼 제가 나름 짠 목차중에서.....2개는 본거임

오늘은 Subject를 공부해보도록 할게요.

 

Subject


 

Subject는 외부 발신자(outside callers)가 element를 publish할 수 있는 방법을 제공하는 publisher..

먼 쌉소리?

 

걍 이 친구는 Publisher라고 이해하는게 제일 맘이 편하겠네요...

 

응 Publisher 채택하고 있어~

 

Subject하니까 RxSwift랑 너무너무 비교하고싶다...

하지만 참겠읍니다..

 

이 Combine에 미리 만들어진...Subject가 2개가 있습니다.

정확히 말하면 Subject 프로토콜의 concrete implementation이 2개가 존재합니다. 

 

바로 

 

- CurrentValueSubject

- PassthroughSubject

 

입니다.

 

CurrentValueSubject

single value를 래핑하고 값이 변경될 때마다 새 element를 publish하는 subject.

PassthroughSubject와 달리 CurrentValueSubject는 가장 최근에 publish된 element의 버퍼를 유지.

CurrentValueSubject에서 send를 호출하면, 현재 값도 업데이트 되므로,

값을 직접 업데이트 하는 것과 같음~

 

코드에서 볼 수 있듯이, 생성 할 때 부터 초기값을 주게 되어있습니다. 반드시 줘야하며..빼먹으면 오류남ㅎ

 

PassthroughSubject

downstream subscribers에게 element를 broadcasts하는 subject입니다. 

CurrentValueSubject와 달리, PassthroughSubject에는

가장 최근에 publish된 element의 초기값 또는 버퍼가 없음

PassthroughSubject는 subscribers가 없거나 현재 demand가 0이면 value를 삭제(drop)함

 

CurrentValueSubject와 달리 생성시 별다른 초기값을 주지 않아도 됩니다.

 

 

그리고 코드를 봐서 감이 오실지도 모르지만..

Subject는 send(_:)라는 메소드를 통해 값을 스트림에 "주입"할 수 있는 Publisher입니다.

 

 

자..근데..

 

send가 3개나 있음ㅎ

 

send(input: )은 알겠죠!?

send(completion: ), send(subscription:)은 뭘까요?

 

send(completion:)

subscriber에게 completion signal을 보내는 메소드에요~

그래서

 

이런식으로 사용 할 수 있답니다. 

 

 예제로 볼게요.

 

 

 

먼저, 

 

Never를 Error로 수정했어요. Never는 error가 발생 할 일이 없다~ 라는 거잖아요?

그래서 Never로 지정하면

.failure를 호출 할 수 없어요.

 

그리고 한가지 안게 있는데, 

 

https://zeddios.tistory.com/925

 

Combine (1) - Publisher, Subscriber

안녕하세요 :) Zedd입니다. 이번 휴가동안 SwiftUI를 좀 해볼라하는데 Combine모르면 이거 걍 노답임.... -> 휴가 끝나버렸죠? 2020년 되버렸죠??????;; 그래서 Combine공부.. Combine Combine이 너무 핫했어서....

zeddios.tistory.com

이 글에서 sink는 2가지 종류가 있다고 그랬잖아요? 만약 Error를 낼 수 있으면

receiveCompletion을 가지는 메소드밖에 호출 못하더라구요.

 

 

그리고 마지막으로

send(subcription:)

 

근데 이거 어케 쓰는지 모르겠음..아니 돌아가겐 할 수 있는데 이걸 왜 쓰는지 모르겠음......

어따 쓰는건지 아시는 분ㅎ..?

 

 

 

 

 

참고 

https://developer.apple.com/documentation/combine/subject

 

Subject - Combine | Apple Developer Documentation

Available when Output is Void.

developer.apple.com

 

반응형

'Combine' 카테고리의 다른 글

Combine + UIKit  (2) 2020.04.19
Combine (4) - Cancellable  (0) 2020.03.24
Combine (3) - Scheduler  (4) 2020.03.23
Combine (1-1) - Subcribers.Demand  (0) 2020.02.26
Combine (1) - Publisher, Subscriber  (3) 2020.02.25