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