Objective-C枚举if语句

时间:2014-07-29 19:59:03

标签: objective-c if-statement enums

我正在尝试使用枚举,因此我创建了一个简单的成绩计算器:

    enum grades {
A,
B,
C,
D,
F

};

enum grades gradeSimplifier(int numericGrade){
if (numericGrade>100) {
    NSLog(@"Error");
    return 0;
}
if(numericGrade>=90 && numericGrade<=100){
    return enum grades.A;

}
if(numericGrade>=80 && numericGrade <90){
    enum grades = B
    return grades grades.B;
        }

if(numericGrade >= 70 && numericGrade < 80) {
    enum grades = C
    return grades grades.C;
}

if (numericGrade>=60 && numericGrade <70) {
    return grades grades.D;
}

else {
    return  grades grades.F;
}
}

基本上我希望代码取整数值并将其转换为字母等级。我正在努力解决如何使if语句返回枚举值的语法。

另外,我知道我可以使用开关,因此无需对此进行评论。

谢谢!

2 个答案:

答案 0 :(得分:3)

这里有几个问题。首先,在Objective-C中声明enum的现代方式是NS_ENUM。所以你应该像这样声明你的枚举:

typedef NS_ENUM(NSInteger, Grade) {
    A, B, C, D, F
}

其次,您可能需要考虑重命名枚举值。它们基本上成为全局常量,而Objective-C中没有命名空间。因此,通常人们使用枚举的名称为其枚举值添加前缀。 (此外,人们使用三个字母的前缀代替命名空间,但这是一个单独的问题。)我认为这样的事情会更好:

typedef NS_ENUM(NSInteger, Grade) {
    GradeA, GradeB, GradeC, GradeD, GradeF
};

然后,您可以使用新声明的枚举类型声明您的函数:

Grade getLetterGradeFromNumeric(int numericGrade) {
    if (numericGrade >= 90) return GradeA;
    else if (numericGrade >= 80) return GradeB;
    else if (numericGrade >= 70) return GradeC;
   // ... etc. 
}

答案 1 :(得分:2)

这就是你想要的吗?

typedef enum : NSUInteger {
    GradeError = 0,
    GradeA,
    GradeB,
    GradeC,
    GradeD,
    GradeF
} Grade;


-(Grade)TheGrade:(int)numericGrade
{
    if (numericGrade>100) {
        NSLog(@"Error");
        return GradeError;
    }

    if(numericGrade>=90 && numericGrade<=100){
        return GradeA;
    }
    //....
}