Как работает typedef-block
В C/Obj-C мы делаем typedef как это typedef int MYINT;
, что ясно.
Выполнение typedef для блока - typedef void (^MyBlock) (int a);
Теперь мы можем использовать MyBlock
.
Разве это не должно быть - typedef void (^MyBlock) (int a) MyBlock;
похожее на #define
?
Как работает синтаксис?
Ответы
Ответ 1
См. Объявление ссылки на блок в разделе "Темы программирования блоков":
Блочные переменные содержат ссылки на блоки. Вы объявляете их, используя синтаксис, аналогичный тому, который вы используете для объявления указателя на функцию, кроме того, что вы используете ^ вместо *.
Итак,
typedef void (^myBlock) (int a);
определяет тип блока с использованием того же синтаксиса, что и
typedef void (*myFunc) (int a);
объявляет указатель на функцию.
См. Для получения дополнительной информации о указателях функций см. инструкции typedefs для указателей функций в C.
Ответ 2
Также из раздела "Вопросы программирования блоков" создание типа для блоков должно быть таким:
typedef returnType (^blockName)(argument1, argument2, ...)
Ниже приведен очень простой практический пример:
typedef float (^MyBlockType)(float, float);
MyBlockType AddTwoFloat = ^(float a, float b) {return a + b;};
MyBlockType MultiplyTwoFloat = ^(float a, float b) {return a * b;};
float c = AddTwoFloat(1, 2); //c = 3
float d = MultiplyTwoFloat(1, 2); //d = 2