是否可以將完全形成的塊(包含其所有參數的塊)傳遞給方法,然後在該方法中執行該塊?將塊作爲參數傳遞
目前,我有這樣的結構在我的項目重複:
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)];
}
有在上面的代碼中的一些假設(我不知道是可能的):
- 方法可以接受普通塊類型
- 可以傳遞所有參數但不實際執行的塊
當你說「塊本身可以包含許多不同的變量」,你的意思是塊可以接受的參數不同數目? – trojanfoe 2013-02-21 15:16:59
@trojanfoe我的意思是這種方法應該能夠接受具有不同簽名的塊,例如(void(^)(NSArray * array))成功或(無效(^)(NSDictionary *字典,NSUInteger值))成功 – williamb 2013-02-21 15:21:16
這將是一個問題,因爲你需要提供參數的塊,如果你不知道他們會是什麼,那麼你怎麼能做到這一點?這可能是可能的,但會變得混亂,聽起來不值得付出努力。 – trojanfoe 2013-02-21 15:22:37