在C / Obj-C中,我们做了一个类似于typedef int MYINT;
的typedef,这很清楚。
为块执行typedef - typedef void (^MyBlock) (int a);
现在,我们可以使用MyBlock
。
不应该像typedef void (^MyBlock) (int a) MyBlock;
类似于#define
吗?
语法如何工作?
答案 0 :(得分:64)
请参阅“块编程主题”中的Declaring a Block Reference:
块变量保存对块的引用。你声明他们使用 语法类似于用于声明指向函数的指针, 除了你使用^而不是*。
所以
typedef void (^myBlock) (int a);
使用与
相同的语法定义块的类型 typedef void (*myFunc) (int a);
声明一个函数指针。
参见例如Understanding typedefs for function pointers in C有关函数指针的更多信息。
答案 1 :(得分:22)
同样来自" Blocks Programming Topics",为块创建类型应该是这样的:
typedef returnType (^blockName)(argument1, argument2, ...)
以下是一个非常简单的实例:
typedef float (^MyBlockType)(float, float);
MyBlockType AddTwoFloat = ^(float a, float b) {return a + b;};
MyBlockType MultiplyTwoFloat = ^(float a, float b) {return a * b;};
float c = AddTwoFloat(1, 2); //c = 3
float d = MultiplyTwoFloat(1, 2); //d = 2