RxSwift协议和具体类型

问题描述 投票:1回答:1

我有一个问题 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 所以不应该是这样的吗?

swift rx-swift
1个回答
2
投票

Can 可能是一个子类型的 ItemBehaviorRelay<Can> 亚型 BehaviorRelay<Item>.

另外,你不应该在代码中传递BehaviorRelays。而应该传递Observables。

一旦你知道了这两条规则,你最终会得到。

func handle(item: Observable<Item?>) {
    // do something with item here
}

handle(item: canRelay.map { $0 })
© www.soinside.com 2019 - 2024. All rights reserved.