wake-up-neo.com

Wie funktioniert die Eingabe eines Blocks?

In C/Obj-C machen wir eine Typendefinition wie diese typedef int MYINT;, Was klar ist.

Typedef für einen Block ausführen -typedef void (^MyBlock) (int a);

Jetzt können wir MyBlock verwenden.

Sollte es nicht so sein wie - typedef void (^MyBlock) (int a) MyBlock;#define?

Wie funktioniert die Syntax?

46
user1559227

Siehe Deklarieren einer Blockreferenz in "Themen zur Blockprogrammierung":

Blockvariablen enthalten Verweise auf Blöcke. Sie deklarieren sie mit einer Syntax, die derjenigen ähnelt, mit der Sie einen Zeiger auf eine Funktion deklarieren, mit der Ausnahme, dass Sie ^ anstelle von * verwenden.

So

 typedef void (^myBlock) (int a);

definiert den Typ eines Blocks mit der gleichen Syntax wie

 typedef void (*myFunc) (int a);

deklariert einen Funktionszeiger.

Siehe z. Grundlegendes zu typedefs für Funktionszeiger in C Weitere Informationen zu Funktionszeigern.

65
Martin R

Das Erstellen eines Typs für Blöcke sollte auch unter "Themen zur Blockprogrammierung" folgendermaßen aussehen:

typedef returnType (^blockName)(argument1, argument2, ...)

Unten ist ein sehr einfaches praktisches Beispiel:

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