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

Nic*_*ard 12 iphone objective-c nsobject ios

我有一个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
Run Code Online (Sandbox Code Playgroud)

.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
Run Code Online (Sandbox Code Playgroud)

我希望能够做到这样的事情:

Person *person = [[[Person alloc] init] autorelease];
person.nameFirst = @"Steve";
person.nameLast = @"Johnson";
person.personType = kPersonTypeStaff;
Run Code Online (Sandbox Code Playgroud)

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

ugh*_*fhw 17

您可以像任何原始类型(如intfloat)一样定义它.当您使用时typedef,您告诉编译器该名称是表示此名称的类型.因此,您将添加一个具有该类型的实例变量(我将我的帖子中的类型大写以将其与变量或属性区分开来):

personType personType;
Run Code Online (Sandbox Code Playgroud)

然后添加属性定义:

@property (nonatomic) personType personType;
Run Code Online (Sandbox Code Playgroud)

然后你合成并使用它:

@synthesize personType;

self.personType = kPersonTypeStaff;
Run Code Online (Sandbox Code Playgroud)

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