PublishSubject
- 그냥 Subject 만드는 것.
- PublishSubject 뒤에 <>안에 타입을 정해줘야한다
import UIKit
import RxSwift
let disposeBag = DisposeBag()
let subject = PublishSubject<String>()
subject.onNext("Issue 1")
subject.subscribe { event in
print(event)
}
subject.onNext("Issue 2")
subject.onNext("Issue 3")
subject.onCompleted()
subject.onNext("Issue 4")
BehaviorSubject
- subscribe전 마지막 value를 출력함
- 밑에 코드 경우 Last Issue가 마지막 값이니 그걸 출력하고 PublishSubject와 동일하게 작동
import UIKit
import RxSwift
let disposeBag = DisposeBag()
let subject = BehaviorSubject(value: "Initial Value")
subject.onNext("Last Issue")
subject.subscribe { event in
print(event)
}
subject.onNext("Issue 1")
ReplaySubject
- subscribe 시점에서 마지막 두 개 부터 시작해서 출력함(buffersize에 따라 변동)
- 첫 subject.subscribe는 Issue2,3,4,5,6을 출력 할 것임(1,2,3 중 2,3이 마지막 두 개 이니)
- 이 후 두 번째 subject.subscribe는 5,6을 출력함
import UIKit
import RxSwift
let disposeBag = DisposeBag()
let subject = ReplaySubject<String>.create(bufferSize: 2)
subject.onNext("Issue 1")
subject.onNext("Issue 2")
subject.onNext("Issue 3")
subject.subscribe {
print($0)
}
subject.onNext("Issue 4")
subject.onNext("Issue 5")
subject.onNext("Issue 6")
print("[Subscription 2]")
subject.subscribe {
print($0)
}
Variable
- variable을 통해 처음에 지정한 value 값을 넣어줄 수 있음.
- 즉, variable에는 item 1,2가 출력이 될 것
- Variable을 사용하면 BehaviorRelay를 추천하기는 함(아래 설명)
import UIKit
import RxSwift
let disposeBag = DisposeBag()
let variable = Variable([String]())
variable.value.append("Item 1")
variable.asObservable()
.subscribe {
print($0)
}
variable.value.append("Item 2")
BehaviorRelay
- Variable과 비슷하나 RxCocoa를 import해서 사용함
- 위의 variable을 사용하면 Depreciated가 나온다. 이는 추후에 없어질 수 있기 때문이다(Variable이)
- 주석과 같이 accept(relay.value~~~)를 할 수 있지만 이는 코딩이 어려우니 value에 append를 한 후 마지막에 accept로 넣어주는 방법이 있다
import UIKit
import RxSwift
import RxCocoa
let disposeBag = DisposeBag()
let relay = BehaviorRelay(value: ["Item 1"])
var value = relay.value
value.append("Item 2")
value.append("Item 3")
relay.accept(value)
relay.asObservable()
.subscribe {
print($0)
}