En C/Obj-C, nous faisons un typedef comme celui-ci typedef int MYINT;
Qui est clair.
Faire typedef pour un bloc -typedef void (^MyBlock) (int a);
Maintenant, nous pouvons utiliser MyBlock
.
Cela ne devrait-il pas être comme - typedef void (^MyBlock) (int a) MyBlock;
similaire à #define
?
Comment fonctionne la syntaxe?
Voir Déclaration d'une référence de bloc dans "Rubriques de programmation des blocs":
Les variables de bloc contiennent des références aux blocs. Vous les déclarez en utilisant une syntaxe similaire à celle que vous utilisez pour déclarer un pointeur sur une fonction, sauf que vous utilisez ^ au lieu de *.
Donc
typedef void (^myBlock) (int a);
définit le type d'un bloc en utilisant la même syntaxe que
typedef void (*myFunc) (int a);
déclare un pointeur de fonction.
Voir par exemple Comprendre les typedefs pour les pointeurs de fonction en C pour plus d'informations sur les pointeurs de fonction.
Également à partir de "Rubriques de programmation de blocs", la création d'un type pour les blocs devrait ressembler à ceci:
typedef returnType (^blockName)(argument1, argument2, ...)
Voici un exemple pratique très simple:
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