티스토리 뷰
1편 : https://junsangkwon.tistory.com/20
2편 : https://junsangkwon.tistory.com/21
RxSwift 마지막 편인 3편입니다. 오늘 정리할 내용은 Subject, Relay입니다!
Subject
- Observable이자 Observer
- 실시간으로 Observable에 값을 추가하고 Subscribe를 할 수 있습니다.
- Subscibe가 호출되는 시점과 상관없이 데이터가 나중에 발생하면 그때부터 이벤트를 전달하는 방식입니다.
Subject의 종류
- PublishSubject
- BehaviorSubject
- ReplaySubject
- AsyncSubject
PublishSubject
- 가장 기본 형태로, 초기 값이 따로 없습니다.
- subscribe해도 데이터를 주지 않다가 나중에 데이터가 발생하면 그때 전달하는 방식입니다.
- 진행중에 다른 곳에서 Subscribe 해도 마찬가지로 동작합니다.
override func viewDidLoad(){
super.viewDidLoad()
printnum()
pSubject.onNext(1)
pSubject.onNext(4)
}
let pSubject = PublishSubject<Int>()
func printnum() {
pSubject.subscibe(onNext: { n in
print(n)
})
}
// 출력 결과
// 1
// 4
BehaviorSubject
- PublishSubject와 비슷하지만 디폴트 값(초기 값)이 존재합니다.
- 생성 초기에, subscribe를 하면 디폴트 값이 전달됩니다.
- 그 후, 다른 데이터들도 발생되는 대로 전달합니다.
- 진행 중에 다른 곳에서 Subscribe 한다면 가장 최근에 생성된 값을 전달해줍니다.
override func viewDidLoad(){
super.viewDidLoad()
printnum()
bSubject.onNext(1)
bSubject.onNext(4)
}
let bSubject = BehaviorSubject<Int>(value: 3)
func printnum() {
bSubject.subscibe(onNext: { n in
print(n)
})
}
// 출력 결과
// 3
// 1
// 4
ReplaySubject
- PublishSubject처럼 Subscribe 해도 데이터를 주지 않고, 나중에 데이터가 발생하면 그때 전달합니다.
- 다른 점은, 생성될 때 버퍼 사이즈를 지정하여서 진행 중에 다른 곳에서 Subscribe 하게 되면,
버퍼 사이즈만큼 최근 데이터들을 모두 전달합니다.
override func viewDidLoad(){
super.viewDidLoad()
printnum1()
rSubject.onNext(1)
rSubject.onNext(4)
printnum2()
}
let rSubject = ReplaySubject<Int>.create(bufferSize: 3)
func printnum1() {
rSubject.subscibe(onNext: { n in
print(n)
})
}
func printnum2() {
rSubject.subscibe(onNext: { n in
print(n)
})
}
// 출력 결과
// 1
// 4
// 1
// 4
AsyncSubject
- Subscribe 해도 데이터를 주지 않고, 데이터가 발생해도 주지 않습니다.
- Complete 돼야만 Subscribe 한 곳으로 가장 마지막에 발생한 데이터를 전달하는 방식입니다.
Relay
- Subject와 같은 기능을 합니다.
- 사용하기 위해서는 RxCocoa를 import 해야 합니다.
- 제일 크게 다른 점은, error 이벤트, complete 이벤트가 발생해도 종료되지 않습니다.
- 이러한 특징으로 UI 이벤트를 할 때 주로 사용합니다.
- 이벤트를 발생할 때, onNext()가 아닌 accept()를 사용합니다.
- 종류는 PublishRelay, BehaviorRelay 가 있습니다.
PublishRelay
- PublishSubject의 Wrapper 클래스입니다.
- PublishSubject의 특성과 같습니다.
BehaviorRelay
- BehaviorSubject의 Wrapper 클래스입니다.
- BehaviorSubject의 특성과 같습니다.
- .value를 사용해 현재 값을 꺼낼 수 있습니다.
'iOS Programming' 카테고리의 다른 글
[iOS] addSubview() 깔끔하게 하기 (0) | 2021.08.19 |
---|---|
[iOS] Then 라이브러리 사용해보기 (0) | 2021.06.28 |
[iOS] RxSwift 간단한 개념정리 - 2. Operator, Scheduler (0) | 2021.06.10 |
[iOS] RxSwift의 간단한 개념 정리 - 1. Observable (0) | 2021.06.09 |
[iOS] SwiftSoup를 통한 웹 크롤링하기 (0) | 2021.05.04 |
- Total
- Today
- Yesterday
- rxcocoa
- 스냅킷
- swiftsoup
- sharedmemory
- 프로세스
- 운영체제
- RxSwift
- ios
- URLComponents
- 멀티프로세스
- OS
- returnKey
- webcrawl
- optional
- PHImageRequestOptions
- 개발대외활동
- PHAsset
- 디프만
- cs
- 스레드
- 프로세스간통신
- isNetworkAccessAllowed
- 개발동아리
- Swift
- WKUIDelegate
- Xcode
- 부캠
- setBackgroundColor
- 슈퍼스칼라
- 쓰레드
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |