2011-11-28 81 views
12

聲明返回Objective-C塊的C函數的語法是什麼?可能嗎?從C函數返回Objective-C塊

我認爲它應該像

(void (^)(void)) myFunctionReturningABlock(); 

但不會編譯。

+1

當你說不行,你能詳細一點?它在運行時中斷還是會產生編譯器錯誤或警告?讓我們知道「不起作用」是什麼意思,我們可以進一步幫助您。 – Jasarien

+1

[Objective-C塊類型作爲返回值]的可能重複(http://stackoverflow.com/questions/3948173/objective-c-block-type-as-return-value) – Ferruccio

+0

@Jasarien對不起,我得到懶。固定。 –

回答

15

你的函數的語法稍微不正確。

據我瞭解,你應該定義你的塊作爲一個類型,你可以返回類型使用您的函數是這樣的:

typedef void(^MyAwesomeBlock)(void); 

MyAwesomeBlock blockFunction() 
{ 
    MyAwesomeBlock block = ^{ 
     //some code; 
    }; 

    return block; 
} 
+0

謝謝,完美的作品。我也在鏈接的可能重複中嘗試了'typedef-less'版本,但是使用typedef使得它更清晰。 –

+0

這是否有一個typedef-less版本? – nielsbot

+0

@nielsbot如果你閱讀了上面的評論,你會注意到Nick在這個問題的評論中引用了一個typedef-less鏈接。但正如尼克所說,使用typedef使得代碼更具可讀性 - 通常不需要typedef-less版本,除非你想要混亂的不可讀代碼? :/ – Jasarien