Objective-C 块参数问题:此块声明不是原型

den*_*pro 8 block objective-c ios

我正在学习ReactiveObjC,即 ReactiveCocoa Objective-C 版本。

对于以下代码:在RACSignal.h,

- (RACSignal *)reduceEach:(id _Nullable (^)())reduceBlock RAC_WARN_UNUSED_RESULT;
Run Code Online (Sandbox Code Playgroud)

(id _Nullable (^) () )

Xcode 报错:

这个块声明不是原型

可以将多个参数放入reduceBlock(). 如以下代码: In UIAlertView+RACSignalSupport.m, and others ,

- (RACSignal *)rac_buttonClickedSignal {
    RACSignal *signal = [[[[self.rac_delegateProxy
        signalForSelector:@selector(alertView:clickedButtonAtIndex:)]
        reduceEach:^(UIAlertView *alertView, NSNumber *buttonIndex){
            return buttonIndex;
        }]
    ......
    return signal;
}
Run Code Online (Sandbox Code Playgroud)

有点笼统。我想我可以在块中放置零个或多个参数,并void (^block)()声明。

Xcode 现在不支持该语法。我想知道如何解决它,以及为什么。

提前谢谢了。

Cha*_*tka 14

当您尝试使用一组空括号定义函数或块原型时,您可能会收到“不是原型”警告()

把 avoid放在括号的中间——即(id _Nullable (^)(void)),你应该解决这个问题。

  • @dengApro 然后只需将其定义为可变参数,就像 `-[NSString stringWithFormat:]` 所做的那样,使用省略号。`(id _Nullable (^)(NSString *, ...))` (2认同)