在我的对象Class中使用typedef枚举

我有一个People类,它可以容纳一个人。 我希望能够确定这是什么类型的人,所以我想我会尝试使用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; 

我错过了这个想法的关键部分吗?

您可以像任何基本类型(如intfloat )一样定义它。 当您使用typedef ,您告诉编译器此名称是表示此名称的类型。 所以,你要添加一个具有该类型的实例变量(我将我的post中的类型大写,以区别于变量或属性):

 personType personType; 

然后添加属性定义:

 @property (nonatomic) personType personType; 

然后你合成它并使用它:

 @synthesize personType; self.personType = kPersonTypeStaff; 

枚举类型实际上是某种类型的整数,它包含枚举的所有值。 通过使用typedef ,您可以指定此整数应该是枚举中的常量之一,而不是其他任何内容,编译器可以帮助强制执行此操作。 但是,除了变量类型之外,您对它的处理方式与int类型完全相同。

您添加以下属性:

 @property (nonatomic) personType personType;