訂閱后,我用send方法完成了訂閱。
我又訂閱了,但它已經完成了。我怎樣才能再次訂閱?
import Combine
let subject = PassthroughSubject<String, Never>()
subject
.sink(receiveCompletion: { completion in
print("Received completion:", completion)
}, receiveValue: { value in
print("Received value:", value)
})
subject.send("test1")
subject.send(completion: .finished)
subject
.sink(receiveCompletion: { completion in
print("Received completion:", completion)
}, receiveValue: { value in
print("Received value:", value)
})
subject.send("test2")
輸出結果如下。
接收值:test1
接收完成:完成
接收完成:完成
如何獲得“接收值:test2”?
uj5u.com熱心網友回復:
這是 rx 編程的概念,不是特定的組合。我建議你學習基礎知識。https://rxmarbles.com
當您收到完成事件或錯誤事件時,流就結束了它的生命周期。之后就不會再有事件了。
你可以想象這就像溪流的死亡。不要讓它死亡或誕生新的來取代它。
uj5u.com熱心網友回復:
發送完成后,發布者就完成了。因此,如果您想再次訂閱并獲取新事件,則需要該發布者的新實體。
var subject = PassthroughSubject<String, Never>() //<-- var instead of let
subject
.sink(receiveCompletion: { completion in
print("Received completion:", completion)
}, receiveValue: { value in
print("Received value:", value)
})
subject.send("test1")
subject.send(completion: .finished)
subject = PassthroughSubject<String, Never>() //<-- Here
subject
.sink(receiveCompletion: { completion in
print("Received completion:", completion)
}, receiveValue: { value in
print("Received value:", value)
})
subject.send("test2")
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/340173.html
