티스토리 뷰
안녕하세요 :) Zedd입니다.
https://zeddios.tistory.com/925
여기서 제 궁금증은
이거..!!!
나는 1번에서 max(1)로 주고 2번에서 max(2)로 줬는데
왜
응 구독 시작이야~
Zedd
Terror Jr
Alan Walker
Martin Garrix
Don Diablo
응 완료야 finished
ㄱㅏ 나오는지...
저 글에 추가하려다가 글이 길어질 것 같아 따로 쓰기로 했어요 ㅎㅎ
여기에 다 나와있습니다...! 제 글 말고 이거 보셔도 되어요..!!!!!!!
아무튼 정답은...누적이었따!!!!!!
자 코드를 이렇게 수정해볼게요. 바뀐 부분은
이 부분.
위 receive(_:)메소드에서 subscriber의 demand를 동적으로 조절이 가능한데요,
새로운 demand는
내가 1번에서 request로 줬던 demand + receive(_:)에서 리턴한 demand입니다.
네 합이요!!!!!
그러니까 제가 1번에서 1을 리턴했잖아요?
근데 receive(_:)에서
(처음 값을 판단 할 수가 없어서 임의로 저렇게 넣어줬어요. 위 링크도 마찬가지.
원리만..이해하고 넘어갑시다...!!)
첫번째 값 = Zedd가 들어오면 max(2)를 리턴해요~
그러면?
1번에서의 demand = 1
2번에서의 demand = 2
1 + 2 = 3
이 됩니다.
자, 다음은 "Terror Jr"이 들어올건데요, "Zedd"가 아니니..default로 들어갈테고 none으로 리턴될테니..
demand는 바뀌지 않게 됩니다.
그래서 결과는?
응 구독 시작이야~
Zedd
Terror Jr
Alan Walker
가 됩니다!!!!!!!
제가 1번에서 max(1)을 주고
2번에서 max(2)를 리턴했는데
응 구독 시작이야~
Zedd
Terror Jr
Alan Walker
Martin Garrix
Don Diablo
응 완료야 finished
전부 다 나온 이유..!! 아시겠죠?
1 + 2 + 2 + 2...이렇게 Demand가 계속 누적되어서 전부 다 나올 수 있었던거에요!
악 그리고..
이렇게 아주 좋은 메소드가 있었네요...
출력은
receive subscription: (["Zedd", "Terror Jr", "Alan Walker", "Martin Garrix", "Don Diablo"])
응 구독 시작이야~
request max: (1)
receive value: (Zedd)
request max: (2) (synchronous)
receive value: (Terror Jr)
receive value: (Alan Walker)
아 간지 안나게....print 일일이 했네..ㅎ
여러분들은 print()를 애용하시길..
자 그리고 예제를 하나 더 볼게요.
ZeddSubscriber안에 subscription변수를 하나 만들었습니다.
PassthroughSubject는....다음 글에서 공부하긴 할건데,
Combine의 Suject프로토콜의 concrete implementation중 하나에요.
send를 통해 값을 주입할 수 있습니다.
자 이렇게 하면 아까랑 결과는 똑같아요~
하지만
이렇게 아까 만들어놨던 subscription변수를 통해 demand를 새로 request하면 어떻게 될까요~?
demand가 누적되는건 아니고
demand의 값이 2로 바뀌게 됩니다.
그래서
출력은
receive subscription: (PassthroughSubject)
request max: (1)
receive value: (Zedd)
request max: (2) (synchronous)
receive value: (Terror Jr)
receive value: (Alan Walker)
request max: (2)
receive value: (Avicii)
receive value: (LANY)
이렇게 됩니다.
send를 통해 값을 주입 할 수도 있지만, completion도 주입 할 수 있어요.
결과는
receive subscription: (PassthroughSubject)
request max: (1)
receive value: (Zedd)
request max: (2) (synchronous)
receive value: (Terror Jr)
receive value: (Alan Walker)
receive finished
request max: (2)
여기서 알 수 있는 사실은
뭐 당연하겠지만
publisher가 완료되면, 더이상 값 또는 완료 이벤트를 수신하지 않습니다.
'Combine' 카테고리의 다른 글
Combine + UIKit (2) | 2020.04.19 |
---|---|
Combine (4) - Cancellable (0) | 2020.03.24 |
Combine (3) - Scheduler (4) | 2020.03.23 |
Combine (2) - Subject (0) | 2020.02.29 |
Combine (1) - Publisher, Subscriber (3) | 2020.02.25 |
- fastlane
- Git
- 제이슨 파싱
- swift 공부
- WWDC
- Combine
- github
- actor
- ios 13
- WKWebView
- np-hard
- WidgetKit
- np-complete
- Accessibility
- 스위프트
- SwiftUI
- swift delegate
- 스위프트 문법
- UIBezierPath
- 회고
- swift array
- swift3
- swift tutorial
- IOS
- FLUTTER
- swift sort
- 피아노
- Xcode
- iOS delegate
- Swift
- Total
- Today
- Yesterday