我正在学习在写作中使用块但是当我尝试创建其中一个时,编译器会报告一个非常奇怪的错误!例如,对于以下代码:
NSNumber *(^eseguiIlCalcolo)(void)=
^{
};
编译器报告以下错误:
Incompatible block pointer types initializing 'NSNumber
*(^_strong)(void)' with an expression of type 'void(^)(void)'
哪里出错?我可以修理吗?这与ARC有关吗?
答案 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);
};