我使用 ReactiveSwift 有一段时间了,但突然遇到了一个奇怪的 bug 什么的。
我正在使用 MVVM 架构,并有一个简单的视图控制器和一个视图模型。VM 有一个类型为 的属性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: ())
}
我不知道为什么会这样。在主线程上调用视图模型本身的初始化,那么什么可能导致这种行为?提前致谢。