在尝试减少一些信号时,我遇到了可怕的编译问题。
RACSignal* contactIdentifierSignal = RACObserve(self, contactIdentifier);
RACSignal* displayNameSignal = RACObserve(self, displayName);
RACSignal* mappedThing = [RACSignal combineLatest:@[contactIdentifierSignal, displayNameSignal] reduce:^id(NSString* identifierValue, NSString* displayNameValue){
return @([identifierValue length] > 0 && [displayNameValue length] > 0);
}];
我得到的错误是:
无法使用类型为'id(^)(NSString * __strong,NSString * __strong)'的右值初始化'id(^)()'类型的参数
根据ReactiveCocoa的文档,我应该为组合块中的每个信号都有一些参数,但它似乎不起作用。
我不知道为什么这个东西需要一个没有参数的减少块......
以前有人遇到过这个问题吗?
答案 0 :(得分:1)
我知道它看起来很糟糕,但是当我使用Objective-C ++时,这件事情很疯狂。
我通过将它转换为 id 来解决这个问题,并且它可以工作......不要问我为什么。
RACSignal* contactIdentifierSignal = RACObserve(self, contactIdentifier);
RACSignal* displayNameSignal = RACObserve(self, displayName);
RACSignal* mappedThing = [RACSignal combineLatest:@[contactIdentifierSignal, displayNameSignal] reduce:(id)^id(NSString* identifierValue, NSString* displayNameValue){
return @([identifierValue length] > 0 && [displayNameValue length] > 0);
}];
答案 1 :(得分:0)
我最近听说过使用Objective-C ++时会发生此错误。无论您是否使用objc ++,请考虑使用combineLatest:
然后使用map:
,可能使用RACTupleUnpack
。