Понимание синтаксиса сложных блоков

Я новичок в разработке 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) = ...

Мне просто не хватает как.

Изменить: третья пустота должна была быть в скобках. Я исправил это. Это неправильно на изображении, но я не хотел переделывать все изображение только для этого. :) Если это окажется источником моей проблемы, я исправлю это здесь.

Ответы на вопрос(2)

Ваш ответ на вопрос