我正在使用ReactiveSwift一段时间,但突然遇到了一个奇怪的错误或其他东西。
我正在使用MVVM体系结构,并具有一个简单的视图控制器和一个视图模型。 VM具有类型Signal<Void, NoError>
的单个属性。在VM的初始化中,我向其观察者发送了一个空值。在视图控制器的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是在主线程上调用的,那么可能导致这种行为的原因是什么? 预先感谢。
答案 0 :(得分:2)
您的模型在初始化期间发送值。
但是,您的viewDidLoad
函数在初始化后的 设置了观察者,因此它不准备观察它。由于现在已配置观察者,因此后续调用将起作用。
您有一些选择,但是基本上您需要更改顺序。