2011-08-19 1 views
12

У меня есть класс People, который содержит разные фрагменты информации о человеке. Я хотел бы узнать, что это за человек, поэтому я подумал, что попробую использовать typedef enum для этого, так как я видел это раньше, и это кажется самым чистым решением. Но я не уверен, как объявить это, а затем превратить его в собственность.Использование перечисления typedef в моем объекте Класс

.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 

Я хочу быть в состоянии сделать что-то вроде:

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

Я пропускаю важную часть этой идеи?

ответ

17

Вы определяете это, как вы бы для любого примитивного типа (например, int или float). Когда вы используете typedef, вы сообщаете компилятору, что это имя является типом, который представляет это. Таким образом, вы бы добавить переменный экземпляр с этим типом (я капитализируюсь типа в моем посте, чтобы отличить его от переменного или свойства):

personType personType; 

Затем добавить определение свойства:

@property (nonatomic) personType personType; 

Тогда вы синтезировать и использовать его:

@synthesize personType; 

self.personType = kPersonTypeStaff; 

типа а перечисление на самом деле какой-то тип целого числа, которое содержит все значения перечисления. Используя typedef, вы можете указать, что это целое число должно быть одной из констант в перечислении и ничего больше, и компилятор может помочь в этом. Но, за исключением типа переменной, вы обрабатываете его точно так же, как и тип int.

+0

Трепет, так просто! Спасибо! –

2

Вы добавить следующее свойство:

@property (nonatomic) personType personType; 
+1

Вы не можете сохранить перечисление. – ughoavgfhw

+0

Спасибо, скопируйте и вставьте ошибку! –