Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/120.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_Reactive Cocoa_Frp_Reactive Cocoa 3 - Fatal编程技术网

Ios 反应:订阅平坦映射信号的已完成事件

Ios 反应:订阅平坦映射信号的已完成事件,ios,reactive-cocoa,frp,reactive-cocoa-3,Ios,Reactive Cocoa,Frp,Reactive Cocoa 3,这是我的代码片段。问题是它没有到达subscribeCompleted块。当我在地图块内返回空信号时,它应该立即完成。不是吗 RACObserve(self.object, "mobile").skip(2).doNext { (_) -> Void in self.tabBarController?.showHud("Updating Profile") }.flattenMap { (object) -> RACStream

这是我的代码片段。问题是它没有到达subscribeCompleted块。当我在地图块内返回空信号时,它应该立即完成。不是吗

RACObserve(self.object, "mobile").skip(2).doNext { (_) -> Void in
                self.tabBarController?.showHud("Updating Profile")
            }.flattenMap { (object) -> RACStream! in
                return RACSignal.empty()
            }.subscribeCompleted { () -> Void in
                log.error("Completed")
                self.tabBarController?.hideHud()
            }

展平映射可以看作是将整个信号转化为一个空信号的集合,完成的信号将在每个空信号完成(展平映射的信号完成)之前不会发送。

展平映射返回的信号将仅在“源”信号完成时完成。在您的情况下,将
flattmap
运算符应用于以下信号:

RACObserve(self.object,“mobile”)。跳过(2)


RACObserve
返回的信号仅在解除分配被观察对象时完成。根据您想要实现的目标,您可以使用一些操作符来转换信号,并获得另一个将在更早完成的操作符

例如,您可以使用
filter
take
,以便在发送符合某些条件的第一个值后,结果信号完成:

RACObserve(self.object, "mobile").skip(2).doNext { (_) -> Void in
                    self.tabBarController?.showHud("Updating Profile")
}.filter {
//some filtering for the value of self.object.mobile 
     return $0.checkSomeConditions() 
}.take(1)
.subscribeCompleted { () -> Void in
        log.error("Completed")
        self.tabBarController?.hideHud()
}

请注意,您甚至根本不需要
flattmap
。由于
take
operator,信号将简单地完成。

“只有当“源”信号完成时,Flattmap返回的信号才会完成”,这消除了我的疑虑。