web-dev-qa-db-fra.com

Comment fonctionne la dactylographie d'un bloc

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?

46
user1559227

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.

65
Martin R

É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
22
fujianjin6471