Я некоторое время использую ReactiveSwift, но неожиданно обнаружил странную ошибку или что-то в этом роде.
Я использую архитектуру MVVM и имею простой контроллер представления и модель представления для него.Виртуальная машина имеет одно свойство типа Signal<Void, NoError>
.В инициализации виртуальной машины я отправляю ее наблюдателю пустое значение.На контроллере вида viewDidLoad
я слушаю этот сигнал и печатаю какой-то текст.Вот модель представления:
class SomeVCModel {
let (someSignal, someSignalObserver) = Signal<Void, NoError>.pipe()
init() {
print (Thread.isMainThread)
DispatchQueue.main.async {
self.someSignalObserver.send(value: ())
}
}
}
А вот контроллер представления:
class SomeVC {
var model: SomeVCModel!
override func viewDidLoad() {
super.viewDidLoad()
model = SomeVCModel()
model.someSignal.observeValues { (_) in
print ("Some Value")
}
}
}
В этом случае оператор print
не вызывается.Однако, когда я отправляю значение наблюдателю, явно определяя основной поток из DispatchQueue
, все работает:
DispatchQueue.main.async {
self.someSignalObserver.send(value: ())
}
Я не могу понять, почему это происходит.Init для самой модели представления вызывается в основном потоке, так что может вызвать такое поведение?Заранее спасибо.