Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
RxSwift协议及其具体类型_Swift_Rx Swift - Fatal编程技术网

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]
的子类型)谢谢!你是否有更多关于不传递行为关系的阅读?(继电器是一种主体。)