2012-08-31 34 views
0

我想寫完工塊的方法:如何編寫強大的完成塊?

//typedef head of block 
typedef void (^CommonErrors)(NSError *error); 

//method with block 
-(void)MethodWithString:(NSString*)string onError:(CommonErrors)ErrorBlock; 

//somewhere in code: 

[self MethodWithString:(NSString*) onError:^(NSError *error)ErrorBlock]; 

這一切ok,如果我在^(NSError *error)ErrorBlock雙擊,
話,我都會有這樣的代碼:^(NSError *error){code}

[self MethodWithString:(NSString*) 
       onError:^(NSError *error){ 
        code 
       } 
]; 

但每次,當我用這個CommonErrors
我用我的模板:onError:(CommonErrors)ErrorBlock
我到處代碼將是這樣的:

onError:^(NSError *error){ 
    ErrorBlock(error) 
} 

我能做到這一點的地方定義這個模板?或者類似的東西?可能嗎?

回答

2

其實我只是重讀你的問題 - 塊型絕不會在消費者的方法簽名中使用。其原因是,如果別人不知道該類型,怎麼會通過其他人知道要傳遞的參數?

您所看到的行爲是由設計,塊的類型定義擴展到一個實際的簽名。

顯然,這是一個代碼片段的問題。

看到這個http://nearthespeedoflight.com/article/xcode_4_code_snippets

+0

是的,我知道,但有可能寫類似的模板或其他什麼東西?也許'#define'什麼的? – gaussblurinc

+0

一個定義不會改變任何東西。究竟是什麼問題?你定義了一個塊,你有一個塊,我不知道除了xcode代碼完成之外,問題是什麼。 –

+0

我試圖找出問題是什麼,看來也許你不想爲你的錯誤處理有一個塊,所以然後不要使用塊,只是通過一個NSError **到被調用的函數作爲正常 –