Id нравится избавляться от объявления сложного типа перед моими одноблочными блоками:
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");
Тогда theres a dispatch_block_t
, но это просто сокращенная строка:
typedef void (^dispatch_block_t)(void);
Есть ли способ избавиться от точного объявления типа и по-прежнему выполнить блок после этого простым способом? Я знаю, что могу это сделать:
id foo = ^{ return @"bar"; };
dispatch_sync(dispatch_get_current_queue(), foo);
... но это просто смещает шум от объявления к исполнению.