2011-11-28 4 views
12

Objective-Cブロックを返すC関数を宣言する構文は何ですか?出来ますか?Objective-Cブロックを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あなたのすぐ上のコメントを読んでいるなら、ニックはtypedef-lessが質問のコメントにリンクしていることに気づくでしょう。しかし、Nickの言葉通り、typedefを使うとコードをもっと読みやすくなります。一般的にtypedef-lessのバージョンは望ましくないのですが:/ – Jasarien

関連する問題