gpt4 book ai didi

swift - 组合最新行为 Signal 与 SignalProducer (ReactiveCocoa 4) 的差异

转载 作者:行者123 更新时间:2023-11-30 13:38:21 24 4
gpt4 key购买 nike

我目前正在运行基本运算符,并遇到了combineLatest 运算符的行为差异。我不确定这是一个错误还是我未能理解 Signals 和 SignalProducers 之间的差异。

let (numbersSig, numbersOb) = Signal<Int, NoError>.pipe()
let (lettersSig, lettersOb) = Signal<String, NoError>.pipe()
let signal = combineLatest(numbersSig, lettersSig)
signal.observeNext({value in print(value)})

numbersOb.sendNext(1)
lettersOb.sendNext("A")
lettersOb.sendNext("B")

生产:(1,“A”)(1,“B”)

但是,如果我使用 SignalProducers 编写我认为等效的代码:

let numberProducer = SignalProducer<Int, NoError> { (observer, disposable) in
for v in [1] { observer.sendNext(v) }
}

let letterProducer = SignalProducer<String, NoError> { (observer, disposable) in
for v in ["A", "B", "C", "D"] { observer.sendNext(v) }
}

let combinedProducer = combineLatest(numberProducer, letterProducer)
combinedProducer.on(next: {value in print(value) }).start()

输出:(1,“D”)

我故意将observer.sendCompleted() 排除在SignalProducers 之外,因为我认为这会负责,但事实并非如此。我错过了什么?

最佳答案

是的,这看起来确实是一个错误。您介意在 Github 存储库上打开一个问题以便我们可以在那里查看吗?更好的是,如果您可以针对失败的测试创建 PR,那就太棒了! :)

我会检查一些可能是解决方法的内容:如果使用 startWithNext 而不是 on + start,是否会得到相同的结果?

关于swift - 组合最新行为 Signal 与 SignalProducer (ReactiveCocoa 4) 的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35842346/

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