クラス内に静的ブロック変数があります。そのブロックを呼び出し元に返すか、送信するために、プロパティまたはインスタンスセレクタを宣言するにはどうすればよいですか?ブロックへのポインタを返す
これは私の静的ブロックです:
static NSResultComparison(^myBlock)(id obj1, id obj2);
クラス内に静的ブロック変数があります。そのブロックを呼び出し元に返すか、送信するために、プロパティまたはインスタンスセレクタを宣言するにはどうすればよいですか?ブロックへのポインタを返す
これは私の静的ブロックです:
static NSResultComparison(^myBlock)(id obj1, id obj2);
それはあなたのブロックをtypedef
するのがベストでしょう。
//interface.h
typedef NSResultComparison (^ComparisonBlock)(id obj1, id obj2);
@interface ...
...
-(ComparisonBlock) getComparisonBlock;
@end
//implementation.m
//Here is your static block implementation
static ComparisonBlock myStaticBlock = ^(id obj1, id obj2)
{
...
return result;
};
@implementation ...
-(ComparisonBlock)getComparisonBlock
{
return myStaticBlock;
}
@end
ブロックタイプを複数回使用する場合には便利ですが、実際にOPが要求しているものであるかどうかはわかりません。 –
必ずしもそうではありません。ほとんどの場合、プロパティやメソッドにカスタムブロックがありますが、ブロックシグネチャは1回か2回しか入力されないため、typedefを気にしません。 typedefはグローバル型の名前空間を汚染します。 –
ありがとう、typedefは私のためにそれをしました。私は+(^ NSComparisonResult(id obj1、id obj2))getComparisonBlockのようなものを宣言しようとしていましたが、それは受け取りません。型定義では –
あなたはあなたの質問が何であるかを明確にすることはできますか?あなたのプロパティ/メソッドを宣言して戻り値の型としてブロックを持つだけの問題は何ですか?それともその構文がわからないのですか?あなたのブロックタイプの無名形式は '(NSResultComparison(^)(id、id))'です。 –
@KevinBallard私は、明確化が必要であることに同意します。セレクタへのすべての呼び出しで返されるクラスの静的ブロック変数のシナリオを示すために私の答えを更新しました。 – Joe