如何在 Objective-C 中声明带有可变参数的块函数?

How to declare a block function with variadic arguments in Objective-C?

如何在 Objective-C 中声明带有可变参数的块函数?

NSString *(^fn)(va_list) = ^(...) {  // ?

};

你有两个问题:

  1. va_list 参数与 ... 参数不同。
  2. 可变参数 C 函数必须至少有一个命名参数。

这里有一个编译的例子:

NSString *(^fn)(NSString *format, ...) = ^NSString *(NSString *format, ...){
    va_list ap;
    va_start(ap, format);
    NSString *answer = [[NSString alloc] initWithFormat:format arguments:ap];
    va_end(ap);
    return answer;
};