我有一个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;
我错过了这个想法的关键部分吗?
答案 0 :(得分:17)
您可以像对待任何原始类型(如int
或float
)一样定义它。当您使用typedef
时,您告诉编译器此名称是表示此名称的类型。那么,你要添加一个具有该类型的实例变量(我将我的帖子中的类型大写,以区别于变量或属性):
personType personType;
然后添加属性定义:
@property (nonatomic) personType personType;
然后你合成并使用它:
@synthesize personType;
self.personType = kPersonTypeStaff;
枚举类型实际上是某种类型的整数,它包含枚举的所有值。通过使用typedef
,您可以指定此整数应该是枚举中的常量之一,而不是其他任何内容,编译器可以帮助强制执行此操作。但是,除了变量类型之外,您对它的处理方式与int
类型完全相同。
答案 1 :(得分:2)
您添加以下属性:
@property (nonatomic) personType personType;