Понимание синтаксиса сложных блоков
Я новичок в разработке Objective C и iOS, но уже 13 лет ветеран .NET. Мне трудно мысленно представить следующую декларацию, которая пришла отПрограммирование с Целью C руководство:
void (^(^a)(void (^) (void))) (void) = ...
Это используется как пример того, почему следует использоватьtypedef
определить блоки, но я хочу понять, на что я смотрю, чтобы лучше понять синтаксис определения блока.
Вот как я это наметил:
Я сталкиваюсь с проблемами в том, что вот как я понимаю основной синтаксис:
[return_val] (^[block_name]) ([block_args]) = ...
Если это так, то у меня есть блок, который возвращает void и не имеет аргументов, но называется(^a) (void (^) void)
, Значение названия моего блока, а не прямой строки, само по себе является блоком.
Я явно что-то здесь упускаю. Может кто-нибудь, пожалуйста, пролить свет на это? По словам сайта, это упрощает это:
typedef void (^SimpleBlock) (void);
SimpleBlock (^complexBlock) (SimpleBlock) = ...
Мне просто не хватает как.
Изменить: третья пустота должна была быть в скобках. Я исправил это. Это неправильно на изображении, но я не хотел переделывать все изображение только для этого. :) Если это окажется источником моей проблемы, я исправлю это здесь.