Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.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
Ios 仅在另一个可观察对象收到元素后订阅可观察对象_Ios_Swift_Rx Swift - Fatal编程技术网

Ios 仅在另一个可观察对象收到元素后订阅可观察对象

Ios 仅在另一个可观察对象收到元素后订阅可观察对象,ios,swift,rx-swift,Ios,Swift,Rx Swift,我试图在一个地方声明我的所有订阅,并且没有任何中间中继或触发器。以下是我想要实现的目标 我有一个信号,只有在加载了所有其他内容并且这个东西工作正常后,它才会开始接收值。但现在我需要引入另一个可观察的,当我订阅时,它将立即开始发出值,因为它正在从数据库获取数据。这有点问题,因为我的UI还没有准备好显示结果,只有当信号发出第一个值时,它才会准备好。在此之后,我希望接收可观察到的将接收到的每一个值 我尝试使用skipUntil,这很好,但是我正在失去可观察的的第一个元素switchLatest也不是很

我试图在一个地方声明我的所有订阅,并且没有任何中间中继或触发器。以下是我想要实现的目标

我有一个
信号
,只有在加载了所有其他内容并且这个东西工作正常后,它才会开始接收值。但现在我需要引入另一个
可观察的
,当我订阅时,它将立即开始发出值,因为它正在从数据库获取数据。这有点问题,因为我的UI还没有准备好显示结果,只有当
信号
发出第一个值时,它才会准备好。在此之后,我希望接收
可观察到的
将接收到的每一个值

我尝试使用
skipUntil
,这很好,但是我正在失去
可观察的
的第一个元素
switchLatest
也不是很好的匹配。我还研究了
amb
,但这也不会给我正确的结果,因为它订阅了两个序列,而这不是我需要的


我的问题是:只有在原始可观察对象收到一个值后,才有可能订阅其他可观察对象吗?同时保持订阅活动,以便它对新值做出反应。

听起来像是一个简单的平面图或其衍生产品就是您所需要的。这在很大程度上取决于X和Y的发射频率,以及X在第一次发射后要执行的操作

您可以通过阅读了解更多信息,但下面的大理石图是一个不错的总结(它们假设默认的“冷”或惰性可观察。如果
y
是热的,则情况就不同了):


这完全取决于你到底想要什么样的行为。

skipUntil做的正是你所需要的,你说你失去了第一个元素是什么意思?这里你没有给出太多细节。“其他所有内容加载后”是什么意思?这是否意味着调用viewDidLoad时X会发射?什么是
X
,您需要它来创建
Y
X
是否多次发射?你说,
Observable
从数据库中获取值,但暗示它多次发射。这是本地数据库还是脱离网络请求?你是对的。当我在寻找某种复杂的解决方案时,
dlatMapFirst
正是我一直在寻找的。非常感谢。
x.flatMap { _ in y }

x   +---1---2---3---|
y       +--A--B--C--|
y           +--D--E--F--|
y               +--G--H--J--|
--
    +------A--BD-CEG-FH--J--|
x.flatMapFirst { _ in y }

x   +---1---2---3---|
y       +--A--B--C--|
--
    +------A--B--C--|
x.flatMapLatest { _ in y }

x   +---1---2---3---|
y       +--A
y           +--D
y               +--G--H--J--|
--
    +------A---D---G--H--J--|
x.concatMap { _ in y }

x   +---1---2---3---|
y       +--A--B--C--|
y                   +--D--E--F--|
y                               +--G--H--J--|
--
    +------A--B--C-----D--E--F-----G--H--J--|