Использование перечисления typedef в моем объекте Класс
У меня есть класс People, который содержит разные фрагменты информации о человеке. Я хотел бы узнать, что это за человек, поэтому я подумал, что попробую использовать typedef enum для этого, так как я видел это раньше, и это кажется самым чистым решением. Но я не уверен, как объявить это, а затем превратить его в свойство.
.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;
Я пропустил важную часть этой идеи?
Ответы
Ответ 1
Вы определяете его так же, как и для любого примитивного типа (например, int
или float
). Когда вы используете typedef
, вы сообщаете компилятору, что это имя является типом, который представляет это. Таким образом, вы бы добавили переменную экземпляра с этим типом (я заглавил тип в своем сообщении, чтобы отличить его от переменной или свойства):
personType personType;
Затем добавьте определение свойства:
@property (nonatomic) personType personType;
Затем вы синтезируете его и используете его:
@synthesize personType;
self.personType = kPersonTypeStaff;
Тип перечисления на самом деле является некоторым типом целого числа, которое содержит все значения перечисления. Используя typedef
, вы можете указать, что это целое число должно быть одной из констант в перечислении и ничего больше, и компилятор может помочь в этом. Но, за исключением типа переменной, вы относитесь к нему точно так же, как и к типу int
.
Ответ 2
Вы добавляете следующее свойство:
@property (nonatomic) personType personType;