我想将不同的块传递给方法。该方法随后将传入的块用作dispatch_async的参数。
我的块声明如下:
typedef int (^ComputationBlock)(int);
接受块的类方法实现为:
- (void)doSomething:(int)limit withBlock:(ComputationBlock)block;
{
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
// typical in-lined block for dispatch_async:
dispatch_async(queue, ^{
// do some work here
});
// I want to pass in the block as the 2nd parameter to dispatch_async
// but the compiler will warn me of a type mismatch unless I cast
// the block like:
dispatch_async(queue, (dispatch_block_t)block);
}
@end
可以将“block
”参数强制转换为dispatch_block_t
吗?
答案 0 :(得分:12)
不,这样做并不酷 - 传递给dispatch_async的块需要不带任何参数并且不返回任何内容。将你的ComputationBlock转换为一个坏主意(愚弄大自然并不好)。
只需将您要调用的块包装在一个正确的类型中:
dispatch_async(queue, ^{ block(0); } );
(请注意,当您调用ComputationBlock时,还需要为其提供参数。)
答案 1 :(得分:4)
它可以编译,但它不起作用。 dispatch_block_t
块不能带任何参数,也不能有返回值。
答案 2 :(得分:0)
使用__block传递值
__ block int backValue;
它可以在块中修改