我曾经使用了几次块,但从来没有先声明过typedef。
我正在尝试在类上设置这个定义(我们称之为ClassA)
typedef void (^myBlock)();
@property (nonatomic, copy) myBlock onCompletion;
然后我创建了这个类所代表的对象的实例并执行此操作:
ClassA *obj = [[ClassA alloc] init];
obj.onCompletion = ^(){
// my code here
};
它抱怨“不兼容的块指针类型分配”......
你能解释一下吗?答案 0 :(得分:1)
虽然您不必指定块的返回类型,但如果您的块不带任何参数,则必须指定 void
。
答案 1 :(得分:1)
答案 2 :(得分:0)
声明的块类型myBlock
和块文字的类型的唯一区别可能是是返回类型。
如果将返回类型保留在块文字中,编译器会自动将其计算出来:
myBlock block1 = ^() { // everything is fine
return;
};
myBlock block2 = ^() { // does not work, types differ
return 1;
};
答案 3 :(得分:0)
根据OP的要求,我发布原始评论作为答案,即使有其他答案说明同样的事情:
您需要明确指定该块不带参数。你的typedef应该是:
typedef void (^myBlock)(void);