Search code examples
swiftrx-swift

RxSwift BehaviorRelay auto isDisposed


This is my code here:

class MapManager: NSObject {

    let removeFenceTask = BehaviorRelay<String?>(value: nil)

    override init() {
        super.init()

        removeFenceTask
            .filter({ $0 != nil })
            .debug("removeFenceTask", trimOutput: true)
            .flatMap { (taskId: String?) -> Observable<TaskModel> in
                guard let `taskId` = taskId, let provider = Application.shared.provider else { return Observable.just(TaskModel()) }
                return provider.queryTaskDetail(taskId: taskId).asObservable()
        }
        .asObservable()
        .subscribe(onNext: { [weak self] (taskModel) in
            self?.removeFence(taskModel: taskModel)
        }).disposed(by: rx.disposeBag)

    }
}
    func queryTasks(_ currentPage: Int, status: TaskStatus) -> Single<([TaskModel], Bool)> {
        return requestObject(
            .queryTasks(currentPage: currentPage, pageSize: 10, status: status), type: TaskModelWrapper.self)
            .map({ (taskModelWrapper) -> ([TaskModel], Bool) in
                let tasks = taskModelWrapper.data?.data ?? []
                tasks.filter({ $0.taskStatus == .canceled || $0.taskStatus == .deliveryCompleted || $0.taskStatus == .taskCompleted || $0.taskStatus == .terminated })
                    .forEach { (taskModel) in
                        MapManager.shared.removeFenceTask.accept(taskModel.taskId)
                }
                return (tasks, taskModelWrapper.data?.isNoMoreDataShow ?? false)
            })
    }

Finally I got isDisposed after 2 event successfully

Console:

2019-11-27 10:46:27.203: newFenceTask -> subscribed

2019-11-27 10:46:27.203: removeFenceTask -> subscribed

2019-11-27 10:46:27.204: removeFenceTask -> Event next(Optional("123"))

2019-11-27 10:46:27.207: removeFenceTask -> Event next(Optional("1908157SRZTT2DGF"))

2019-11-27 10:46:27.295: removeFenceTask -> isDisposed

Question: Why this isDisposed happened?


Solution

  • Isn't your rx.disposeBag getting disposed?