我有类Distance和typedef枚举单元,
@interface Distance:NSObject{
double m_miles;
}
@property double m_miles;
-(Distance *) initWithDistance: (double) value andUnit:(Unit) unit;
@implementation Distance
-(Distance *)initWithDistance: (double) value andUnit:(Unit) unit{
self = [super init];
if (self){
switch (unit) {
case Unit.miles: m_miles = value;
break;
case Unit.km: m_miles = value/1.609344;
break;
}
}
我在哪里宣布我的枚举单位?如何访问
typedef enum{
miles;
km;
}Unit
在其他课程中,我应该可以拨打Distance.Unit.km
或里程:
Distance *a = [[Distance alloc] initWithDistance: 10.2 andUnit: Distance.Unit.km];
答案 0 :(得分:6)
在C中,enum
不会使其值“合格”。您必须使用
Distance *a = [[Distance alloc] initWithDistance: 10.2 andUnit:km];
// ^^
// no Distance.Unit.stuff
答案 1 :(得分:2)
看起来你正试图像C ++那样做一个类typedef。我不记得在Objective-C中是否允许这样做,但这不是我在这里怎么做的。我会把课程外面的枚举保留下来。只需使用typedef创建另一个头文件。虽然这是一个微不足道的例子,但是在Distance类之外的枚举可能有其他用途,所以在外面定义它。
另一种可能性,如果你正在使用它,那就是有两个初始值设定项initWithMiles:
和initWithKilometers:
。
答案 2 :(得分:1)
Objective-C不会改变C关键字的含义。它被设置为使用消息和对象。您应该在enum
之前声明@interface
。我建议你跟随JeffW使用initWithMiles:
和
initWithKilometers:
,请参阅Cocoa Fundamentals了解如何设计方法。