Подтвердить что ты не робот

Использование перечисления 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;

Я пропустил важную часть этой идеи?

4b9b3361

Ответ 1

Вы определяете его так же, как и для любого примитивного типа (например, int или float). Когда вы используете typedef, вы сообщаете компилятору, что это имя является типом, который представляет это. Таким образом, вы бы добавили переменную экземпляра с этим типом (я заглавил тип в своем сообщении, чтобы отличить его от переменной или свойства):

personType personType;

Затем добавьте определение свойства:

@property (nonatomic) personType personType;

Затем вы синтезируете его и используете его:

@synthesize personType;

self.personType = kPersonTypeStaff;

Тип перечисления на самом деле является некоторым типом целого числа, которое содержит все значения перечисления. Используя typedef, вы можете указать, что это целое число должно быть одной из констант в перечислении и ничего больше, и компилятор может помочь в этом. Но, за исключением типа переменной, вы относитесь к нему точно так же, как и к типу int.

Ответ 2

Вы добавляете следующее свойство:

@property (nonatomic) personType personType;