【发布时间】:2016-01-26 06:13:36
【问题描述】:
我有一个信号,基本上它所做的就是请求使用 NSRULSession 进行配置。当我执行 subscribeNext 时,它会完美地完成请求,但是第二次不再需要此请求。我该如何避免呢?
【问题讨论】:
-
能否提供与问题相关的源代码?
标签: ios swift2 reactive-cocoa reactive-cocoa-3
我有一个信号,基本上它所做的就是请求使用 NSRULSession 进行配置。当我执行 subscribeNext 时,它会完美地完成请求,但是第二次不再需要此请求。我该如何避免呢?
【问题讨论】:
标签: ios swift2 reactive-cocoa reactive-cocoa-3
使用属性和其值绑定到该属性的操作。然后仅根据需要触发操作以刷新属性的值。
【讨论】:
您的信号在每次订阅时都会完成它的工作,除非您采取明确的措施来防止这种情况发生。听起来您在这里想要的是 replayLast 运算符。该运算符将缓存您的信号的最后发出的值,并在您再次订阅您的信号时发出它,而不是重做初始工作。
在此处阅读“重播”运算符: http://spin.atomicobject.com/2014/06/29/replay-replaylast-replaylazily/
【讨论】:
一个时间信号可以通过take:操作符发出。您只需要传递一个参数来表示执行信号所需的次数。经过这么多的执行后,此网关将完全关闭,subscribeNext: 块中将不再传递数据。在您的情况下,此金额将等于 1。
RACSignal *requestConfigurationSignal = ...
[[requestSignal
take:1]
subscribeNext:^(id value){
NSLog(@"Request in progress")
}]
【讨论】: