Я пытаюсь сделать несколько вызовов API и заполнить базу данных областей. Все отлично работаетОднако, когда я пытаюсь запустить метод performSegue()
на subscribe()
, возникает исключение, сообщающее, что я не могу сделать это в фоновом потоке, что вполне разумно.
Но так как я подписываюсь на MainScheduler.instance
не должен ли метод subscribe()
выполняться в потоке пользовательского интерфейса?
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?
Редактировать: Если я добавлю эту строку .observeOn(MainScheduler.instance)
после .subscribeOn(MainScheduler.instance)
, метод подписки будет запущен в главном потоке. Это правильное поведение? Что .subscribeOn(MainScheduler.instance)
даже делает?