티스토리 뷰

Combine

[Combine]Just

밀쿄 2019. 12. 16. 15:12

잠시 언급한 적 있는 Just에 대해서 알아보겠습니다.
Just는 한 번만 실행되고 종료되어집니다.

끝입니다.하면 너무 재미없을테니 몇 가지를 조금 더 살펴보겠습니다

image

Just를 실행시키고 Jump to Definition을 실행시켜 보면 다음과 같은 소스를 얻을 수 있습니다.
일단 눈에 띄는 것은 제가 맨 처음 Just를 소개했을 때처럼 제너릭 구조체라는 것이 눈에 보입니다.
그 외에 눈에 보이는 것은

 public func receive<S>(subscriber: S) where Output == S.Input, S : Subscriber, S.Failure == Just<Output>.Failure

이 부분이 눈에 띕니다.
인자로 받는 값은 Subscriber을 채택하고 있어야하고
Just가 방출하는 값이랑 subscriber의 Input이랑 같아야하고
Subscriber의 Failure은 Just

.Failure이랑 같아야하네요. 즉 Never이어야 한다는 거겠네요.
Sink는 Just에 구현되어 있지 않고 Just가 채택하고 있는 Publiser에 구현되어 있습니다.

image2

Just는 여기까지 살펴보도록 하겠습니다.

이 뒤부터는 OpenCombine라는 라이브러리로 설명하는 부분입니다.

보실 분만 보시길 바랍니다.

https://github.com/broadwaylamb/OpenCombine/blob/master/Sources/OpenCombine/Publishers/Just.swift

Subscribers.Sink에 보면 이런 코드가 있습니다.

저 중에서 awaitingSubscription 코드를 보면 subscription에 request를 부르고 있습니다.

그런데 Just에서 Inner라는 클래스로 넘겨줍니다.
Inner는 Just의 extension에 존재하는 클래스 입니다.

Inner라는 클래스에 보면 request라는 항목이 있는데

여기서 보면 .finished를 넘겨주고 있습니다.

즉 정리하면

Just 호출 -> Inner라는 놈으로 Subscribers에 전달 -> Subscribers에서는 Inner라는 놈에 request호출 -> request에서 finishe 전달

이렇게 함으로써 Just는 단 하나만 내보내는 것을 알 수 있습니다.

'Combine' 카테고리의 다른 글

CombineLatest  (0) 2020.02.11
[Combine] Sequence  (0) 2019.12.20
[Combine] Scheduler  (0) 2019.12.15
[Combine] Cancellable  (0) 2019.12.13
Start! Combine  (0) 2019.12.12
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
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
글 보관함