2013-03-09 8 views
38

In C/Obj-C, machen wir eine typedef wie diese typedef int MYINT;, die klar ist.Wie funktioniert typedef-in einem Block

Doing typedef für einen Block - typedef void (^MyBlock) (int a);

Jetzt können wir MyBlock verwenden.

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

Wie funktioniert die Syntax?

Antwort

59

Siehe Declaring a Block Reference in "Bausteine ​​der Programmierung":

Blockvariablen Verweise auf Blöcke halten. Sie deklarieren sie mit Syntax ähnlich wie Sie einen Zeiger auf eine Funktion, deklarieren, außer dass Sie^anstelle von * verwenden. So

typedef void (^myBlock) (int a); 

definiert eine den Typ eines Blocks die gleiche Syntax wie

typedef void (*myFunc) (int a); 

deklariert einen Funktionszeiger.

Siehe z.B. Understanding typedefs for function pointers in C für weitere Informationen über Funktionszeiger.

17

auch von „Bausteinen Programmieren Themen“, eine Art für die Blöcke zu schaffen, wie dies sein sollte:

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

Unten ist ein sehr einfaches Beispiel aus der Praxis:

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 
+0

Einfacher und klarer Code-Schnipsel – Jasmeet

Verwandte Themen