我有一个问题 BehaviorRelay
的协议类型,并在具体类型上使用它。这是我的代码。
protocol Item {
var title: { get }
}
struct Can: Item {
let title = "Can"
}
let canRelay = BehaviorRelay<Can?>(value: nil)
func handle(item: BehaviorRelay<Item?>) {
// do something with item here
}
handle(item: canRelay) // can't do this?
我认为我可以调用 handle(item:)
但事实并非如此,因为两者的论点并不匹配。我知道它们不匹配,但是... ... Can
是一种 Item
所以不应该是这样的吗?
Can
可能是一个子类型的 Item
但 BehaviorRelay<Can>
是 不 亚型 BehaviorRelay<Item>
.
另外,你不应该在代码中传递BehaviorRelays。而应该传递Observables。
一旦你知道了这两条规则,你最终会得到。
func handle(item: Observable<Item?>) {
// do something with item here
}
handle(item: canRelay.map { $0 })