gpt4 book ai didi

swift - 为什么observeValues block 没有被调用?

转载 作者:行者123 更新时间:2023-11-30 10:38:09 25 4
gpt4 key购买 nike

尝试在我的项目中使用ReativeSwift,但有些东西表现不佳检查了很多次,也查不出问题所在。一切都是对的,只是没有被调用。

class MSCreateScheduleViewModel: NSObject {

var scheduleModel = MSScheduleModel()
var validateAction: Action<(), Bool, NoError>!

override init() {
super.init()
validateAction = Action(execute: { (_) -> SignalProducer<Bool, NoError> in
return self.valiateScheduleModel()
})
validateAction.values.observeValues { (isok) in
print("isok??") //this line not called
}
validateAction.values.observeCompleted {
print("completed") //this line not called
}
}

func valiateScheduleModel() -> SignalProducer<Bool, NoError> {
let (signal, observer) = Signal<Bool, NoError>.pipe()
let signalProducer = SignalProducer<Bool, NoError>(_ :signal)
observer.send(value: true) //this line called
observer.sendCompleted() //this line called
return signalProducer
}
}

最佳答案

当您像在 valiateScheduleModel 中那样通过包装现有信号来创建 SignalProducer 时,生产者会在信号启动时观察信号并转发事件。这种情况下的问题是信号在生产者从函数返回并启动之前完成,因此不会转发任何事件。

如果您想创建一个在启动时立即发送 true 并完成的生产者,那么您应该执行以下操作:

func valiateScheduleModel() -> SignalProducer<Bool, NoError> {
return SignalProducer<Bool, NoError> { observer, lifetime in
observer.send(value: true)
observer.sendCompleted()
}
}

在启动生产者之前,闭包不会执行,因此 Action 将看到事件。

关于swift - 为什么observeValues block 没有被调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57449843/

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