RXSwift不订阅主线程

问题描述 投票:3回答:1

我正在尝试进行多个API调用并填充领域数据库。一切正常。但是,当我尝试在performSegue()方法上运行subscribe()时,会引发异常,通知我无法在后台线程上执行此操作,这是完全合理的。]

但是由于我正在订阅MainScheduler.instance,所以subscribe()方法是否不应在UI线程上运行?

Single.zip(APIClient.shared.getSchools(), APIClient.shared.getPointsOfInterest())
        .observeOn(SerialDispatchQueueScheduler(qos: .background))
        .flatMap { zip in return Single.zip(SchoolDao.shared.insertSchools(schoolsJson: zip.0), PointOfInterestDao.shared.insertPointsOfInterest(poisJson: zip.1))}
        .flatMap{ _ in Single.zip(SchoolDao.shared.countSchools(), PointOfInterestDao.shared.countPointsOfInterest())}
        .subscribeOn(MainScheduler.instance)
        .subscribe(onSuccess: { tableCounts in
            let (schoolsCount, poisCount) = tableCounts
            if(schoolsCount != 0 && poisCount != 0){
                print(Thread.isMainThread) //Prints False
                self.performSegue(withIdentifier: "splashToLogin", sender: nil)
            }
        }, onError: {
            error in return
        }).disposed(by: disposeBag)

我是否对RXSwift的工作方式做出了错误的假设?

Edit:

如果在.observeOn(MainScheduler.instance)之后添加此行.subscribeOn(MainScheduler.instance),则subscribe方法将在主线程上运行。这是正确的行为吗? .subscribeOn(MainScheduler.instance)甚至在做什么?

我正在尝试进行多个API调用并填充领域数据库。一切正常。但是,当我尝试对subscribe()方法运行performSegue()时,引发了异常,通知我可以'...

ios swift rx-swift
1个回答
2
投票

您的编辑说明了所有内容。您最初对subscribeOn和observeOn的假设是倒退的。

© www.soinside.com 2019 - 2024. All rights reserved.