UI이기 때문에 PublishSubject 대신 PublishRelay를 쓰는 코드를 봤다. 차이가 뭔데? 궁금해서 정의 찾아봄
아 참고로 RxSwift Github 공식 README.md에 가보면 RxSwift, RxCocoa, RcRelay 등의 연관 관계를 설명해주고 있다.
//
// PublishRelay.swift
// RxRelay
//
// Created by Krunoslav Zaher on 3/28/15.
// Copyright © 2017 Krunoslav Zaher. All rights reserved.
//
import RxSwift
/// PublishRelay is a wrapper for `PublishSubject`.
///
/// Unlike `PublishSubject` it can't terminate with error or completed.
public final class PublishRelay<Element>: ObservableType {
private let subject: PublishSubject<Element>
// Accepts `event` and emits it to subscribers
public func accept(_ event: Element) {
self.subject.onNext(event)
}
/// Initializes with internal empty subject.
public init() {
self.subject = PublishSubject()
}
/// Subscribes observer
public func subscribe<Observer: ObserverType>(_ observer: Observer) -> Disposable where Observer.Element == Element {
self.subject.subscribe(observer)
}
/// - returns: Canonical interface for push style sequence
public func asObservable() -> Observable<Element> {
self.subject.asObservable()
}
}
주석에 잘 써져 있다.
PublishRelay is a wrapper for `PublishSubject`.
PublishRelay는 PublishSubject의 wrapper Class이며,
Unlike `PublishSubject` it can't terminate with error or completed.
PublishSubject와 달리 error나 completed를 받아도 종료되지 않는다.
'Development > iOS' 카테고리의 다른 글
[iOS] UIAlertController 톺아보기 (0) | 2022.03.10 |
---|---|
[iOS] Storyboard 없이 코드로 UIWindow.rootViewController 설정하기 (0) | 2022.03.10 |
[iOS] SnapKit (0) | 2022.03.03 |
[iOS] RxCocoa (0) | 2022.03.03 |
[iOS] Grand Central Dispatch (GCD) (0) | 2022.02.28 |