2014-10-06 53 views
0

当对象的属性isWorking设置为YES时,应在屏幕上显示活动指示符。此代码修复:信号宽限期

[RACObserve(object, isWorking) subscribeNext:^(NSNumber *isWorking) { 
    if ([isWorking boolValue]) { 
    [activityIndicator startAnimating]; 
    } 
    else { 
    [activityIndicator stopAnimating]; 
    } 
}]; 

你如何防止射击,除非一定的时间量已经通过了信号,说1秒。这会阻止活动指示器闪烁。

节流不会在这种情况下做对吗?

回答

2

如果isWorking等于YES,我会包裹原始信号以引入延迟。像下面这样。

RACSignal *isWorkingSignal = [[RACObserve(object, isWorking) 
     map:^id(NSNumber *isWorking) { 
      if (YES == [isWorking boolValue]) { 
       NSTimeInterval delayInterval = 2; // seconds 
       return [[RACSignal return:isWorking] delay:delayInterval]; 
      } else { 
       return [RACSignal return:isWorking]; 
      } 
     }] switchToLatest]; 

[isWorkingSignal subscribeNext:^(NSNumber *isWorking) { 
    if (YES == [isWorking boolValue]) { 
     [activityIndicator startAnimating]; 
    } 
    else { 
     [activityIndicator stopAnimating]; 
    } 
}]; 
+2

您可能感兴趣的['-throttle:valuesPassingTest:'](https://github.com/ReactiveCocoa/ReactiveCocoa/blob/7d161bbe2ccc69bde7de4055c2f404651453b883/ReactiveCocoaFramework/ReactiveCocoa/RACSignal%2BOperations.h#L59-L82 ),这或多或少都是一样的。 – 2014-10-09 01:34:46