【发布时间】:2021-06-11 14:32:41
【问题描述】:
我有一个固定类型的属性
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<Status>、Published<Substatus1>和Published<Substatus2>是完全不相关的类型。我建议放弃 substatus 的想法(或通过拥有它来解释你真正想要做什么)。