【问题标题】:Using a typedef enum in my object Class在我的对象类中使用 typedef 枚举
【发布时间】:2011-08-19 19:03:14
【问题描述】:

我有一个 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;

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

【问题讨论】:

    标签: iphone objective-c ios nsobject


    【解决方案1】:

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

    personType personType;
    

    然后添加一个属性定义:

    @property (nonatomic) personType personType;
    

    然后你合成它并使用它:

    @synthesize personType;
    
    self.personType = kPersonTypeStaff;
    

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

    【讨论】:

      【解决方案2】:

      您添加以下属性:

      @property (nonatomic) personType personType;
      

      【讨论】:

      • 您不能保留枚举。
      猜你喜欢
      • 2012-11-17
      • 2013-12-23
      • 2015-01-27
      • 1970-01-01
      • 1970-01-01
      • 2012-05-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多