如何将发布者转换为CurrentValueSubject?

时间:2020-06-14 12:25:40

标签: swift reactive-programming combine

我有一个发布者,我的视图的onReceive已订阅。我也不想在onAppear中复制逻辑,而是希望onReceive中的发布者在首次订阅时触发。

是否可以将发布者转换为CurrentValueSubject?这是我想要做的:

var myPublisher: CurrentValueSubject<Void, Never> {
    Just(()) // Error: Cannot convert return expression of type 'Just<()>' to return type 'CurrentValueSubject<Void, Never>'
}

这是可行的还是更好的方法?

1 个答案:

答案 0 :(得分:1)

您不能随意将发布者转换为CurrentValueSubject,因为这是一种非常特殊的发布者类型。问问自己,您是否真的需要将myPublisher的类型设置为CurrentValueSubject<Void, Never>,或者是否需要AnyPublisher<Void, Never>

var myPublisher: AnyPublisher <Void, Never> {
    Just(()).eraseToAnyPublisher()
}

或者,如果您想做的只是创建一个CurrentValueSubject作为其初始值的()实例,则可以使用以下方法:

var myPublisher: CurrentValueSubject<Void, Never> {
    CurrentValueSubject<Void, Never>(())
}