我正在尝试进行多个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()时,引发了异常,通知我可以'...
您的编辑说明了所有内容。您最初对subscribeOn和observeOn的假设是倒退的。