我需要检查两个值并根据这两个值设置条件,返回一个NS_ENUM值。
来自ReactiveCocoa github readme,我发现了这个
RAC(self, createEnabled) = [RACSignal
combineLatest:@[ RACObserve(self, password), RACObserve(self, passwordConfirmation) ]
reduce:^(NSString *password, NSString *passwordConfirm) {
return @([passwordConfirm isEqualToString:password]);
}];
它检查两个值,密码和密码确认在一起。我试着稍微修改它来观察两个BOOL属性,它向我显示“不兼容的块指针类型”错误..
RAC(self, showButtonOption) = [RACSignal
combineLatest:@[ RACObserve(self, setting), RACObserve(self, billing) ]
reduce:^(NSSet *setting, NSSet *billing) {
if ([billing containsObject:kBillingExpired]) {
return DialerShowButtonPurchase;
} else if ([setting containsObject:kSettingEnableRecord]) {
return DialerShowButtonRecord;
} else {
return DialerShowButtonCall;
}
}];
我不知道出了什么问题,应该用什么正确的语法来达到目的?
答案 0 :(得分:3)
好吧,让我们看看该方法的签名是什么:
+ (RACSignal *)combineLatest:(id<NSFastEnumeration>)signals
reduce:(id ( ^ ) ( ))reduceBlock
您尝试从reduceBlock
返回枚举值(基元),该值必须具有id
的返回类型。
这是ReactiveCocoa令人烦恼但又不可避免的一个方面:你需要装箱。很多。如果您返回@(DialerShowButtonPurchase)
(等),您实际上将返回NSNumber *
,这是id
,因此它会进行编译。
RAC
宏会自动将其展开,以便showButtonOption
不需要声明为NSNumber *
。