作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
尝试在我的项目中使用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/
我在项目中启用了 SwiftLint,它会针对以下函数发出警告: override func observeValue(forKeyPath keyPath: String?, of _: Any?,
我用 .Old | 创建了一个观察者.新的 选项。在处理程序方法中,我尝试获取前后值,但编译器提示:'NSString' is not convertible to 'NSDictionaryInde
我是一名优秀的程序员,十分优秀!