私はReactive Cocoaに頭を悩ませようとしていRAC(self.windButton.enabled)
ます.セクション(下部)を除いてすべて正常に動作し、reduceブロックは呼び出されません. 誰かが私の間違いを指摘してくれたらうれしいです。コードは一目瞭然で、基本的にアプリは次のようになります。
ここに実装があります
#import "ViewController.h"
@interface ViewController ()
@property (strong, nonatomic) NSNumber *winding;
@property (strong, nonatomic) NSNumber *minWinding;
@property (strong, nonatomic) NSNumber *maxWinding;
@property (weak, nonatomic) IBOutlet UIButton *windButton;
@property (weak, nonatomic) IBOutlet UIButton *unwindButton;
@property (weak, nonatomic) IBOutlet UILabel *windingLabel;
@end
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
self.winding = @0;
self.minWinding = @0;
self.maxWinding = @15;
RACSignal *windingSignal = RACAble(self.winding);
RACSignal *maxWindingSignal = RACAble(self.maxWinding);
RACSignal *minWindingSignal = RACAble(self.minWinding);
RAC(self.windingLabel.text) = [windingSignal map:^id(NSNumber *winding) {
return winding.stringValue;
}];
[[self.windButton rac_signalForControlEvents:UIControlEventTouchUpInside]
subscribeNext:^(id sender) {
self.winding = @(self.winding.integerValue + 1);
}];
[[self.unwindButton rac_signalForControlEvents:UIControlEventTouchUpInside]
subscribeNext:^(id sender) {
self.winding = @(self.winding.integerValue - 1);
}];
RAC(self.windButton.enabled) = [RACSignal
combineLatest:@[windingSignal, maxWindingSignal]
reduce:^(NSNumber *winding, NSNumber *maxWinding) {
return @(winding.intValue < maxWinding.intValue);
}];
RAC(self.unwindButton.enabled) = [RACSignal
combineLatest:@[windingSignal, minWindingSignal]
reduce:^(NSNumber *winding, NSNumber *minWinding) {
return @(winding.intValue > minWinding.intValue);
}];
}
私の問題は、ボタンが無効にならないことです。