我无法理解为什么在这段代码中,如果在主题已订阅send
之后在subject
上调用publisher
,似乎事件没有被接收subscriber
。
如果我将send
调用移到subscribe
函数之前,则列出所有项目(10,20,1,2,3)
let publisher = [1,2,3].publisher
let subject = PassthroughSubject<Int, Never>()
let subscriber = subject.sink { print("value :\($0)")}
publisher.subscribe(subject)
subject.send(10)
subject.send(30)
此打印
value: 1
value: 2
value: 3
与此同时:
let publisher = [1,2,3].publisher
let subject = PassthroughSubject<Int, Never>()
let subscriber = subject.sink { print("value :\($0)")}
subject.send(10)
subject.send(30)
publisher.subscribe(subject)
打印
value: 10
value: 30
value: 1
value: 2
value: 3
答案 0 :(得分:1)
这可能是从集合创建任何发布者的实现细节。在您的第一个示例中,发布者可能实际上并不在乎随后出现的后续值。发送自己的值后,它将使用finished
调用自己的完成。
在第二个示例中,您正在用值预先填充主题。这可能是因为集合发布者的实现将其自己的值附加到订阅时上游的任何值。
不过,为什么您要让发布者订阅该主题?您要在这里完成什么?