2011-08-19 26 views
12

Ho una classe People che contiene diversi bit di una persona. Mi piacerebbe essere in grado di identificare che tipo di persona sia, quindi ho pensato di provare a usare un typedef enum per questo poiché l'ho visto fare prima e sembra la soluzione più pulita. Ma, non sono sicuro di come dichiararlo, quindi trasformarlo in una proprietà.Uso di un typedef enum nel mio oggetto Classe

.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 

voglio essere in grado di fare qualcosa di simile:

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

mi manca una parte cruciale di questa idea?

risposta

17

si definisce come si farebbe per qualsiasi tipo primitivo (come int o float). Quando si utilizza typedef, si sta dicendo al compilatore che questo nome è un tipo che rappresenta questo. Quindi, si dovrebbe aggiungere una variabile di istanza con quel tipo (I maiuscola del tipo nel mio post per distinguerla dalla variabile o proprietà):

personType personType; 

quindi aggiungere una definizione di proprietà:

@property (nonatomic) personType personType; 

Poi si sintetizzare e usarlo:

@synthesize personType; 

self.personType = kPersonTypeStaff; 

tipo A enum è in realtà un certo tipo di numero intero che contiene tutti i valori della enum. Usando typedef, puoi specificare che questo intero dovrebbe essere una delle costanti nell'enumerazione e nient'altro, e il compilatore può aiutarti a far rispettare questo. Ma, ad eccezione del tipo di variabile, lo tratti esattamente nello stesso modo in cui utilizzi il tipo int.

+0

Impressionante, così facile! Grazie! –

2

si aggiunge la seguente proprietà:

@property (nonatomic) personType personType; 
+1

Non è possibile conservare un'enumerazione. – ughoavgfhw

+0

Grazie, copia e incolla errore! –