2011-08-19 2 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

당신은 당신처럼 그것을 정의를하는 어떤 원시적 형 (같은 int 또는 float)합니다. typedef을 사용하면 컴파일러에게이 이름이이를 나타내는 유형임을 알립니다. 그런 다음

@property (nonatomic) personType personType; 

:

personType personType; 

그런 다음 속성 정의를 추가 : 그래서, 당신은 그 유형과 인스턴스 변수를 추가합니다 (I 변수 또는 재산 구별하기 위해 내 게시물의 유형을 대문자로) 당신은 그것을 합성하고 그것을 사용합니다 :

열거 형은 사실 열거 형의 모든 값을 보유하는 정수 유형입니다. typedef을 사용하면이 정수를 열거 형의 상수 중 하나가되도록 지정하고 컴파일러가이를 적용 할 수 있도록 지정할 수 있습니다. 그러나 변수 유형을 제외하고는 정확히 int 유형과 동일하게 취급합니다.

+0

경외심, 너무 쉽다! 고맙습니다! –

2

는 다음과 같은 속성을 추가

@property (nonatomic) personType personType; 
+1

열거 형을 유지할 수 없습니다. – ughoavgfhw

+0

감사합니다. 복사하여 붙여 넣기 오류가 발생했습니다. –