2013-04-23 89 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