RxSwift协议及其具体类型
我遇到了一个RxSwift协议及其具体类型,swift,rx-swift,Swift,Rx Swift,我遇到了一个行为规则的问题,它有一个协议类型并在具体类型上使用它。这是我的密码: protocol Item { var title: { get } } struct Can: Item { let title = "Can" } let canRelay = BehaviorRelay<Can?>(value: nil) func handle(item: BehaviorRelay<Item?>) { // do somethi
行为规则
的问题,它有一个协议类型并在具体类型上使用它。这是我的密码:
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?
协议项{
变量标题:{get}
}
结构Can:Item{
让title=“Can”
}
让canRelay=BehaviorRelay(值:nil)
函数句柄(项:行为规则){
//对这里的物品做点什么
}
句柄(项:canRelay)//不能这样做吗?
我假设我能够调用
handle(item:)
,但事实并非如此,因为参数不匹配。我知道它们不匹配,但是Can
是项的一种类型
那么这不可能吗?Can
可能是项的子类型
,但行为规则
不是行为规则
的子类型
此外,您不应该在代码中传递行为规则。而是传递观察值
一旦你了解了这两条规则,你就会得到:
func句柄(项:可观察){
//对这里的物品做点什么
}
句柄(项:canRelay.map{$0})
可以
是项
的子类型,但行为关系
不是行为关系
的子类型
此外,您不应该在代码中传递行为规则。而是传递观察值
一旦你了解了这两条规则,你就会得到:
func句柄(项:可观察){
//对这里的物品做点什么
}
句柄(项:canRelay.map{$0})
好吧,我不想到处传播Behavior Relay
s,但我能不能不做我想用协议和具体类型做的事情?我不知道你到底想做什么,但你可以使用协议和具体类型,正如我在回答中所示,您只需从可观察
映射到可观察
。(注意,您必须对数组执行相同的操作。[Can]
不是[Item]
的子类型)谢谢!你是否有更多关于不传递行为关系的阅读?(中继是一种主题。)好吧,我不想传递behavior Relay
s,但我能不能不做我想用协议和具体类型做的事情?我不知道你到底想做什么,但你可以使用协议和具体类型,正如我在回答中所示,您只需从可观察
映射到可观察
。(注意,您必须对数组执行相同的操作。[Can]
不是[Item]
的子类型)谢谢!你是否有更多关于不传递行为关系的阅读?(继电器是一种主体。)