2011-08-19 10 views
12

Tengo una clase People que contiene varios bits de sobre una persona. Me gustaría poder identificar qué tipo de persona es esta, así que pensé en usar una enumeración tipodef para esto porque ya lo había visto antes y parece ser la solución más limpia. Pero, no estoy seguro de cómo declarar esto, luego convertirlo en una propiedad.Uso de un typedef enum en mi objeto Clase

.h

typedef enum { 
    kPersonTypeFaculty, 
    kPersonTypeStaff, 
    kPersonTypeSearch 
} personType; 

@interface Person : NSObject { 
    NSString *nameFirst; 
    NSString *nameLast; 
    NSString *email; 
    NSString *phone; 
    NSString *room; 
    NSString *status; 
    NSString *building; 
    NSString *department; 
    NSString *imageURL; 
    NSString *degree; 
    NSString *position; 
    NSString *bio; 
    NSString *education; 
} 

@property (nonatomic, retain) NSString *nameFirst; 
@property (nonatomic, retain) NSString *nameLast; 
@property (nonatomic, retain) NSString *email; 
@property (nonatomic, retain) NSString *phone; 
@property (nonatomic, retain) NSString *room; 
@property (nonatomic, retain) NSString *status; 
@property (nonatomic, retain) NSString *building; 
@property (nonatomic, retain) NSString *department; 
@property (nonatomic, retain) NSString *imageURL; 
@property (nonatomic, retain) NSString *degree; 
@property (nonatomic, retain) NSString *position; 
@property (nonatomic, retain) NSString *bio; 
@property (nonatomic, retain) NSString *education; 

@end 

.m

#import "Person.h" 


@implementation Person 

@synthesize nameFirst, nameLast, email, phone, room, status, building, department, imageURL, degree, position, bio, education; 

- (void)dealloc { 
    [nameFirst release]; 
    [nameLast release]; 
    [email release]; 
    [phone release]; 
    [room release]; 
    [status release]; 
    [building release]; 
    [department release]; 
    [imageURL release]; 
    [degree release]; 
    [position release]; 
    [bio release]; 
    [education release]; 
    [super dealloc]; 
} 

@end 

Quiero ser capaz de hacer algo como:

Person *person = [[[Person alloc] init] autorelease]; 
person.nameFirst = @"Steve"; 
person.nameLast = @"Johnson"; 
person.personType = kPersonTypeStaff; 

me estoy perdiendo una parte crucial de esta idea?

Respuesta

17

Se define como lo haría para cualquier tipo primitivo (como int o float). Cuando usa typedef, le está diciendo al compilador que este nombre es un tipo que representa esto. Por lo tanto, deberá añadir una variable de instancia con ese tipo (I mayúscula del tipo en mi post para distinguirla de la variable o propiedad):

personType personType; 

A continuación, añada una definición de propiedad:

@property (nonatomic) personType personType; 

Entonces a sintetizar y usarlo:

@synthesize personType; 

self.personType = kPersonTypeStaff; 

tipo A enumeración es en realidad algún tipo de número entero que contiene todos los valores de la enumeración. Al usar typedef, puede especificar que este entero debe ser una de las constantes en la enumeración y nada más, y el compilador puede ayudar a aplicar esto. Pero, a excepción del tipo de variable, lo trata exactamente de la misma manera que lo haría con un tipo int.

+0

¡Pavor, tan fácil! ¡Gracias! –

2

se agrega la siguiente propiedad:

@property (nonatomic) personType personType; 
+1

No puede conservar una enumeración. – ughoavgfhw

+0

¡Gracias, copie y pegue el error! –