RACSignal combineLatest:无法减少
RACSignal combineLatest: cannot reduce
我在尝试减少几个信号时遇到了一个可怕的编译问题。
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);
}];
我得到的错误是:
Cannot initialize a parameter of type 'id(^)()' with an rvalue of type 'id(^)(NSString* __strong, NSString* __strong)'
根据 ReactiveCocoa 的文档,我应该为组合块中的每个信号设置一些参数,但它似乎不起作用。
而且我不知道为什么这个东西需要一个没有参数的 reduce 块...
以前有人遇到过这个问题吗?
我最近听说在使用 Objective-C++ 时会发生此错误。无论您是否使用 objc++,请考虑使用 combineLatest:
,然后使用 map:
,可能会使用 RACTupleUnpack
.
我知道它看起来很糟糕,但是当我使用 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);
}];
我在尝试减少几个信号时遇到了一个可怕的编译问题。
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);
}];
我得到的错误是:
Cannot initialize a parameter of type 'id(^)()' with an rvalue of type 'id(^)(NSString* __strong, NSString* __strong)'
根据 ReactiveCocoa 的文档,我应该为组合块中的每个信号设置一些参数,但它似乎不起作用。
而且我不知道为什么这个东西需要一个没有参数的 reduce 块...
以前有人遇到过这个问题吗?
我最近听说在使用 Objective-C++ 时会发生此错误。无论您是否使用 objc++,请考虑使用 combineLatest:
,然后使用 map:
,可能会使用 RACTupleUnpack
.
我知道它看起来很糟糕,但是当我使用 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);
}];