Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- Tuist Swift
- ios swiftdata
- 카카오뱅크 ios
- Firebase Analytics
- swift 5.9
- Subscribe
- Subject
- ios
- Tuist
- JSON
- swift 6
- RxSwift
- observable
- Firebase
- Swift Tuist
- realm
- Combine
- GCD
- arc
- KeyPath
- ribs
- SeSAC
- ios database
- swift
- 네트워크 통신
- swiftdata
- swift database
- SwiftUI
- xcode
- swift db
Archives
- Today
- Total
천원의 개발
Combine Subject, PassthroughSubject, CurrentValueSubject 정리 본문
iOS&Swift🍎/Combine
Combine Subject, PassthroughSubject, CurrentValueSubject 정리
천 원 2023. 10. 12. 13:29안녕하세요. 천원입니다.
Combine을 학습하면서 중요한 개념 중 하나인 Subject 정리하고자 글을 작성합니다.
1. Subject
Publisher를 채택하고 있는 모습입니다. 덕분에 스트림을 생성할 수 있고, Subscriber를 통해서 방출한 이벤트를 받아올 수 있습니다. 다른 Publisher 들과 가장 큰 차이점은 send() 메서드를 사용해서 외부에서 이벤트를 주입시킬 수 있다는 점입니다.
예시 코드를 보자면
var subject = PassthroughSubject<Int, Never>() // Subject 생성
subject.sink { value in
print(value)
}
subject.send(2) // 2출력
원하는 시점에서 이벤트 방출이 가능하죠.
2. PassthroughSubject, CurrentValueSubject
Subject 프로토콜을 채택한 class는 총 2가지가 있습니다.
두개의 Subject를 비교하면서 설명 드리자면 CurrentValueSubject는 버퍼를 사용해서 현재 값을 가지고 있고, PassthroughSubject는 이름 처럼 그냥 가지지 않고 스쳐지나가는 형태로 값을 관리합니다. 덕분에 CurrentValueSubject를 사용하면 초기값을 생성해 주어야 하고 사용하다가 현재 값을 가져오고 싶으면 value를 통해서 접근이 가능합니다.
let passSubject = PassthroughSubject<Int, Never>()
let currentSubject = CurrentValueSubject<Int, Never>(0) // 초기값
--- 현재 값 가져오기 ---
passSubject.value // 호출 불가
currentSubject.value // 0 출력