在Combine 中从不同的发布者派生发布者

时间:2021-03-13 22:18:41

标签: ios swift xcode combine

我有一个固定类型的属性

var statusPublisher: Published<Status>.Publisher

以及其他一些状态,例如 substatus1substatus2

并且我希望它结合其他状态的值,例如

var statusPublisher: Published<Status>.Publisher {
    $substatus1.combineLatest($substatus2).map { s1, s2 -> Status in ... }
}

但它说Cannot convert return expression of type 'Publishers.CombineLatest<Published<Substatus1>.Publisher, Published<Substatus2>.Publisher>' to return type 'Published<Status>.Publisher'

我设法用一个额外的方法解决了这个问题

var connectionStatusSubject = PassthroughSubject<Status, Never>()

我投入的

var connectionStatusPublisher: AnyPublisher<Status, Never> {
    connectionStatusSubject.eraseToAnyPublisher()
}

这里有新的 AnyPublisher,但看起来不太整洁。

有什么方法可以使它正确吗?

1 个答案:

答案 0 :(得分:1)

http://localhost:3000 只是一种特定类型的发布者,由 Published<T>.Publisher 属性包装器创建。完全没有理由使用它作为计算属性的类型。

键入擦除 @Published - 就像您对 AnyPublisher 所做的一样 - 除了您不需要 PassthroughSubject

PassthroughSubject