在类中使用枚举和switch语句

时间:2010-06-09 12:44:18

标签: objective-c cocoa xcode macos

如何使以下计算器类工作?:

//Calculator.h

#import <Cocoa/Cocoa.h>

@interface Calculator : NSObject {
    float initialNumber, operandNumber;
    typedef enum{
    additionOperation,
    subtractionOperation,
    multiplicationOperation,
    divisionOperation
    }operationType;
}

@property(readwrite) float initialNumber, operandNumber;
@property(readwrite) enum operationType; //Line 16

- (float) doOperation;

@end

在XCode 3.1.3中,我得到一个“错误:'typedef'之前的语法错误”和一个“warning:声明没有声明任何东西”在Calculator.h第16行

//Calculator.m

#import "Calculator.h"

@implementation Calculator
@synthesize initialNumber, operandNumber, operationType;

-(float) doOperation{
    switch (self.operationType){  //Line 9
        case 0:
            return self.initialNumber + self.operandNumber;
            break;
        case 1:
            return self.initialNumber - self.operandNumber;
            break;
        case 2:
            return self.initialNumber * self.operandNumber;
            break;
        case 3:
            return self.initialNumber / self.operandNumber;
            break;
        default:
            return 0;
            break;
    }
}

@end

在实现中,XCode给了我“在接口中找不到属性'operationType'的声明”,“对成员'operationType'的请求不是结构或联合。”我正确地宣布我的词汇吗?

此外,在switch语句中,我可以使用“case additionOperation”还是必须使用“case 0”?

2 个答案:

答案 0 :(得分:4)

将您的枚举声明移出类声明。你可以把它放在正上方。并且您可能希望将typedef重命名为“OperationType”。然后,在您现在声明的地方,声明该类型的变量:'OperationType operationType;'

答案 1 :(得分:0)

我收到了一些有趣的答案to similar question I asked here。看看,但要点是...

  

“像NSViewWidthSizable这样的typedef实际上是位掩码,其中   允许你喜欢的好的ORing操作“