gpt4 book ai didi

ios - 尝试将值注入(inject)发布者,但接收到无序值

转载 作者:行者123 更新时间:2023-12-01 19:30:39 26 4
gpt4 key购买 nike

这是对我尝试使用 combine 实现的目标的过度简化。
如果发生某些事情,我需要向共享发布者注入(inject)一个值。
在这里您可以看到,如果 map 接收到数字 2,我使用原始发布者上的发送命令来注入(inject)数字 3。
我希望收到一个数字序列,但我在触发它的事件之前收到了数字 3。

let pub = PassthroughSubject<Int, Never>()

let pubSharered = pub.share().eraseToAnyPublisher()

let anyCanc = pubSharered
.map { value -> Int in
switch value {
case 2:
pub.send(3)
return value
default:
return value
}
}.sink { (value) in
print("Sink: \(value)")
}

pub.send(0)
pub.send(1)
pub.send(2)
pub.send(4)
输出为: 0,1,3,2,4我所期待的是 0,1,2,3,4 .
有人可以解释一下吗?

最佳答案

这似乎是 flatMap 的一个用例.您可以将平面映射到 Publishers.Sequence<[Int], Never>像这样:

let anyCanc = pubSharered
.flatMap { value -> Publishers.Sequence<[Int], Never> in
switch value {
case 2:
return [value, 3].publisher // value, plus a 3
default:
return [value].publisher // change nothing
}
}.sink { (value) in
print("Sink: \(value)")
}

关于ios - 尝试将值注入(inject)发布者,但接收到无序值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62989199/

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