Esperaba que alguien me ayudara a entender la sintaxis de los bloques cuando se usaban como miembros de una clase. Tengo un código que realmente funciona muy bien:iOS 4 - Uso de bloques como miembro de una clase
@class Structure;
typedef void (^StructureDeleteCallback)(Structure *);
@interface StructureListDelegate : NRFCTableDelegate
{
StructureDeleteCallback _structureDeleteCallback;
}
@property (nonatomic, copy) StructureDeleteCallback structureDeleteCallback;
@end
Esto funciona, pero me gustaría entender la sintaxis de la instrucción typedef
; y si realmente se requiere o no usar typedef.
Lo que he leído dice que usar typedef
en esta situación es recomendable porque hace que el código sea mucho más claro; pero no he podido compilarlo al intentar hacer esto sin typedef
. Mi comprensión de typedef fue que la sintaxis era básicamente:
typedef [actual type] [new name for type];
Tales como:
typedef double CLLocationDegrees;
Pero la sintaxis de mi declaración typedef
no coincide con esto. Así que mis preguntas son:
- ¿Cómo puede la sintaxis de mi declaración
typedef
ser tan diferente de otrostypedef
declaraciones/qué hace la sintaxis que estoy usando en realidad significa que el compilador? - ¿Es posible tener un bloque como miembro de una clase sin usar
typedef
?
¡Ah! No pude hacerlo funcionar sin usar typedef porque no me di cuenta de que la sintaxis para definir el iVar sería completamente diferente. Pensé que todavía tendría que tener [typename] [iVarName]; – GendoIkari
Así que solo para aclarar una última cosa ... ya sea en el typedef, o simplemente declarando un bloque, ¿Básicamente es simplemente que los bloques tienen una sintaxis diferente para declararlos que otros tipos? El compilador acaba de ver el símbolo^y sabe que el nombre de la variable está después del ^, en lugar de después del nombre del tipo como está con int x ;? ¡Gracias! – GendoIkari
@Gendolkari ¡Lo tienes! :) –