티스토리 뷰
안녕하세요 :) Zedd입니다.
https://zeddios.tistory.com/925
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
이 글에서 sink는 2가지 종류가 있다고 그랬잖아요? 만약 Error를 낼 수 있으면
receiveCompletion을 가지는 메소드밖에 호출 못하더라구요.
그리고 마지막으로
send(subcription:)
근데 이거 어케 쓰는지 모르겠음..아니 돌아가겐 할 수 있는데 이걸 왜 쓰는지 모르겠음......
어따 쓰는건지 아시는 분ㅎ..?
참고
https://developer.apple.com/documentation/combine/subject
'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 |
- Combine
- np-hard
- swift 공부
- Xcode
- actor
- WKWebView
- np-complete
- Swift
- WWDC
- swift sort
- swift delegate
- UIBezierPath
- 회고
- swift tutorial
- github
- FLUTTER
- ios 13
- 피아노
- swift array
- fastlane
- iOS delegate
- Accessibility
- SwiftUI
- swift3
- 스위프트
- Git
- WidgetKit
- 제이슨 파싱
- IOS
- 스위프트 문법
- Total
- Today
- Yesterday