完全に形成されたブロック (すべてのパラメーターが含まれるブロック) をメソッドに渡して、そのブロックをメソッドで実行することは可能ですか?
現時点では、この構造をプロジェクトで繰り返しています。
if (//block exists)
{
if (self.returnOnMainThread)
{
dispatch_async(dispatch_get_main_queue(), ^
{
//call block here
});
}
else
{
//call block here
}
}
ただし、理想的には、上記のコードの塊を次のようなメソッドに抽象化したいと思います。
- (void) reportSuccessWithBlock:(GenericBlockType)block{
if (block)
{
if (self.returnOnMainThread)
{
dispatch_async(dispatch_get_main_queue(), ^
{
block;
});
}
else
{
block;
}
}
}
編集:
ブロックのタイプは事前にわかりません。
したがって、呼び出しパスは次のようになります
- (void) someMethod:(void (^)(NSArray *array))success
{
//Some code here setting up the array to be passed back
[self reportSuccessWithBlock:success(array)];
}
上記のコードにはいくつかの仮定があります (可能かどうかはわかりません)。
- メソッドはジェネリック ブロック タイプを受け入れることができます
- ブロックは、すべてのパラメーターが存在する状態で渡すことができますが、実際には実行しません。