2013-04-23 88 views

回答

7

德米特里的答案是完全正确的。块语法当成一个C函数声明:

// C function -> <return type> <function name> (<arguments>) 
void someFunction(void) 
{ 
    // do something 
} 

// block -> <return type> (^<block variable name>) (<arguments>) 
void (^someBlock)(void) = ^{ 
    // do something 
}; 

又如:

// C function 
int sum (int a, int b) 
{ 
    return a + b; 
} 

// block 
int (^sum)(int, int) = ^(int a, int b) { 
    return a + b; 
}; 

所以只是觉得块语法为C函数声明: 首先返回类型int,那么块变量的名称(^sum),然后参数类型列表(int, int)

但是,如果你需要经常在你的应用程序特定类型的块,使用typedef:

typedef int (^MySumBlock)(int, int); 

现在,您可以创建MySumBlock类型的变量:

MySumBlock debugSumBlock = ^(int a, int b) { 
    NSLog(@"Adding %i and %i", a, b); 
    return a + b; 
}; 

MySumBlock normalSumBlock = ^(int a, int b) { 
    return a + b; 
}; 

。希望帮助:)

+1

非常棒的答案约翰内斯,谢谢你的概念性演练 – 2013-04-23 09:10:50

+0

高兴地帮助:)我花了我一段时间围绕块语法绕我的头:) – 2013-04-23 09:15:25

2

只是阻止语法

void (^someBlock)(void) = ^{ 
    //some code 
}; 
+0

给你一个答案upvote,但我觉得像其他人可能会帮助,如果它的顶部。谢谢德米特里 – 2013-04-23 09:11:25