从 Combine 中的不同发布者派生发布者
Deriving Publisher from different publishers in Combine
我有一个固定类型的属性
var statusPublisher: Published<Status>.Publisher
和其他一些状态,例如 substatus1
、substatus2
我希望它结合其他状态的值,例如
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
,但好像不太整齐。
有什么方法可以让它变成正确的方式吗?
Published<T>.Publisher
只是一种特定类型的发布者,由 @Published
属性 包装器创建。根本没有理由将其用作计算 属性.
的类型
类型擦除到 AnyPublisher
- 就像你对 PassthroughSubject
做的那样 - 除了你不需要 PassthroughSubject
:
var statusPublisher: AnyPublisher<Status, Never> {
$substatus1
.combineLatest($substatus2)
.map { s1, s2 -> Status in ... }
.eraseToAnyPublisher()
}
我有一个固定类型的属性
var statusPublisher: Published<Status>.Publisher
和其他一些状态,例如 substatus1
、substatus2
我希望它结合其他状态的值,例如
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
,但好像不太整齐。
有什么方法可以让它变成正确的方式吗?
Published<T>.Publisher
只是一种特定类型的发布者,由 @Published
属性 包装器创建。根本没有理由将其用作计算 属性.
类型擦除到 AnyPublisher
- 就像你对 PassthroughSubject
做的那样 - 除了你不需要 PassthroughSubject
:
var statusPublisher: AnyPublisher<Status, Never> {
$substatus1
.combineLatest($substatus2)
.map { s1, s2 -> Status in ... }
.eraseToAnyPublisher()
}