В Swift я создал BaseObserver, в методе подписки я пропускаю этот класс.
Я пытаюсь сделать то же самое в RxJS, используя TypeScript.
Это удобно, когда вы хотите что-то сделать до и после каких-либо событий.
import Foundation
import RxSwift
class BaseObserver<Element>: ObserverType {
public typealias E = Element
var beforeClosure: (() -> Void)?
var completeClosure: ((E) -> Void)?
var errorClosure: ((Error) -> Void)?
var completedClosure: (() -> Void)?
var alwaysClosure: (()->())?
var onCompleteOrError: ((Error?) -> Void)?
init(beforeComplete: (() -> Void)? = nil, onComplete: ((E) -> Void)? = nil, onError: ((Error) -> Void)? = nil, onCompleted: (() -> Void)? = nil, always: (()->())? = nil, onCompleteOrError: ((Error?) -> Void)? = nil) {
self.alwaysClosure = always
self.completeClosure = onComplete
self.errorClosure = onError
self.completedClosure = onCompleted
self.beforeClosure = beforeComplete
self.onCompleteOrError = onCompleteOrError
}
func on(_ event: Event<Element>) {
switch event {
case .next(let element):
beforeClosure?()
completeClosure?(element)
case .error(let error):
beforeClosure?()
errorClosure?(error)
onCompleteOrError?(error)
case .completed:
completedClosure?()
onCompleteOrError?(nil)
}
alwaysClosure?()
}
}