2011-08-19 72 views
12

我有一個People類,它持有關於一個人的各種位。我希望能夠確定這是什麼類型的人,所以我想我會嘗試使用typedef枚舉,因爲我已經看到它之前完成,它似乎是最乾淨的解決方案。但是,我不確定如何申報,然後將其變爲財產。在我的對象中使用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

你定義它,就像您對任何基本類型(如intfloat)。當你使用typedef時,你告訴編譯器這個名字是代表這個的類型。所以,你會增加一個實例變量與類型(I大寫在我的崗位類型從變量或屬性區別):

personType personType; 

然後添加一個屬性定義:

@property (nonatomic) personType personType; 

然後你合成它並使用它:

@synthesize personType; 

self.personType = kPersonTypeStaff; 

一個枚舉類型實際上是某種類型的整數它包含所有枚舉值的。通過使用typedef,可以指定該整數應該是枚舉中的常量之一,而不是別的,編譯器可以幫助強制執行此操作。但是,除了變量類型之外,您對它的處理方式與int類型完全相同。

+0

敬畏,那麼容易!謝謝! –

2

您添加以下屬性:

@property (nonatomic) personType personType; 
+1

你不能保留一個枚舉。 – ughoavgfhw

+0

謝謝,複製並粘貼錯誤! –