NSNumber作为在Objective-C中的块中传递的参数

时间:2013-12-29 12:59:32

标签: objective-c block objective-c-blocks

我正在学习在写作中使用块但是当我尝试创建其中一个时,编译器会报告一个非常奇怪的错误!例如,对于以下代码:

NSNumber *(^eseguiIlCalcolo)(void)=
^{

};

编译器报告以下错误:

Incompatible block pointer types initializing 'NSNumber
*(^_strong)(void)' with an expression of type 'void(^)(void)'

哪里出错?我可以修理吗?这与ARC有关吗?

2 个答案:

答案 0 :(得分:1)

您已声明一个块变量,该变量指向返回NSNumber的块。但是,您尝试使用不返回任何内容的块初始化它。您必须在块的主体中​​插入return语句,以便编译器推断其返回类型:

NSNumber *(^blk)(void) = ^{
    return @(1); // or [NSNumber numberWithInt:1], etc.
};

答案 1 :(得分:0)

返回NSNumber个对象:

NSNumber * (^ReturnNumber)(void) = ^NSNumber *(void) { // the keyword void is not necessary to write here
    return [NSNumber numberWithInt:9];
};

期望NSNumber对象作为参数:

void (^ExpectNumber)(NSNumber *) = ^(NSNumber * number) {
    NSLog(@"%@", number);
};