gpt4 book ai didi

ios - 在 ReactiveSwift 中,信号观察器仅在从主线程显式调用时才发送信号

转载 作者:搜寻专家 更新时间:2023-11-01 06:55:03 25 4
gpt4 key购买 nike

我使用 ReactiveSwift 有一段时间了,但突然遇到了一个奇怪的错误什么的。

我正在使用 MVVM 架构,并有一个简单的 View Controller 和一个 View 模型。 VM 具有类型为 Signal<Void, NoError> 的单个属性.在 VM 的 init 中,我向其观察者发送一个空值。在 View Controller 的 viewDidLoad 上我监听那个信号并打印一些文本。这是 View 模型:

class SomeVCModel {

let (someSignal, someSignalObserver) = Signal<Void, NoError>.pipe()

init() {

print (Thread.isMainThread)

DispatchQueue.main.async {
self.someSignalObserver.send(value: ())
}

}
}

这是 View Controller :

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: ())
}

我不明白为什么会这样。 View 模型本身的 Init 是在主线程上调用的,那么什么会导致这种行为呢?提前致谢。

最佳答案

您的模型在初始化期间发送值。

但是,您的viewDidLoad 函数在初始化之后 设置了观察者,因此它还没有准备好观察它。由于现在已配置观察器,因此后续调用将起作用。

您有几个选项,但基本上您需要更改顺序。

关于ios - 在 ReactiveSwift 中,信号观察器仅在从主线程显式调用时才发送信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54027606/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com