Я хотел бы избавиться от объявления сложного типа перед моими одноразовыми блоками:
void (^blockHelperA)(NSString*, NSString*) = ^(NSString *foo, NSString *bar) {…};
Это можно было бы переписать как:
id blockHelperB = ^(NSString *foo, NSString *bar) {…};
Что выглядит лучше и компилируется, но не может быть выполнено напрямую:
// “Called object type 'id' is not a function or function pointer”
blockHelperB(@"Foo", @"Bar");
Затем идет тип dispatch_block_t
, но это простое сокращение:
typedef void (^dispatch_block_t)(void);
Есть ли способ избавиться от объявления точного типа и по-прежнему выполнять блок простым способом? Я знаю, что могу это сделать:
id foo = ^{ return @"bar"; };
dispatch_sync(dispatch_get_current_queue(), foo);
… но это просто смещает шум от объявления к выполнению.