RACSignal combineLatest:无法减少

时间:2015-03-06 12:30:01

标签: objective-c objective-c-blocks reactive-cocoa

在尝试减少一些信号时,我遇到了可怕的编译问题。

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(^)()'类型的参数

enter image description here

根据ReactiveCocoa的文档,我应该为组合块中的每个信号都有一些参数,但它似乎不起作用。

我不知道为什么这个东西需要一个没有参数的减少块......

以前有人遇到过这个问题吗?

https://github.com/ReactiveCocoa/ReactiveCocoa/blob/master/Documentation/BasicOperators.md#combining-latest-values

2 个答案:

答案 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