Dans C / Obj-C, nous faisons un typedef comme ceci typedef int MYINT;
ce qui est clair
Faire typedef pour un block – typedef void (^MyBlock) (int a);
Maintenant, nous pouvons utiliser MyBlock
.
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 de 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 *.
Alors
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 fonctions dans C pour plus d’informations sur les pointeurs de fonctions.
Également de “Blocs Programming Topics”, créer un type pour les blocs devrait être comme 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