先说结论,CurrentValueSubject适合那些有初始状态的数据。
CurrentValueSubject介绍
和PassthroughSubject相比,CurrentValueSubject在声明时候需要有一个初始值
在playground中输入以下代码
let curPublisher = CurrentValueSubject<String, Never>("No.1")
我们声明了一个发布字符串的publisher,初始值发布“No.1”。
接着我们来订阅这个publisher,接收他的发布值
let cancellable: AnyCancellable = curPublisher
.print("_current_")
.sink { completion in
switch completion {
case .finished:
print("finished")
case .failure(let error):
print("Got a error: \(error)")
}
} receiveValue: { str in
print(str)
}
运行代码,打印信息如下
_current_: receive subscription: (CurrentValueSubject)
_current_: request unlimited
_current_: receive value: (No.1)
No.1
这表明我们已经接收到了发布值,发布值是CurrentValueSubject声明时的初始值。
和PassthroughSubject不同,CurrentValueSubject在被订阅时,会发布他的初始值。
我们把代码改为如下:
let curPublisher = CurrentValueSubject<String, Never>("No.1")
curPublisher.send("No.2")
le