在控制器之间传递难度级别

时间:2014-01-06 15:13:28

标签: ios ios6 ios7 nsstring typedef

我正在寻找在视图控制器之间传递难度级别的最佳方法。

目前我将此设置为字符串。 Easy / Medium / Hard有三个选项,我知道这不是最好的方法,所以我在这里寻找正确的方法。

目前我检查按钮上的标签并设置如下字符串值:

if (sender.tag == 10) {
    self.turnDifficulty = @"Easy";
} else if (sender.tag == 20) {
    self.turnDifficulty = @"Medium";
} else if (sender.tag == 30) {
    self.turnDifficulty = @"Hard";
}

然后我在prepareForSegue方法中传递了值。这种方法的替代方案是什么?虽然这里没有问题,但这样可以正常工作,但这里使用字符串并不是很干净。

2 个答案:

答案 0 :(得分:4)

使用枚举来处理Objective-C中的字符串(实际上,在C和C ++中)的一种替代方法:

typedef enum Difficulty {
    DIFFICULTY_EASY
,   DIFFICULTY_MEDIUM
,   DIFFICULTY_HARD
} Difficulty;

在所有视图控制器包含的标头中声明此enum,并使用枚举常量,就好像它们是数字常量一样。即使您选择在枚举中添加更多项目,该语言也将确保常量保持不变。

当您声明@propertyDifficulty类型的参数时,请勿使用星号,因为enum是基本类型,而不是引用类型。例如:

@property (nonatomic, readwrite) Difficulty difficultyLevel;

-(void)openWithDifficulty:(Difficulty)level;

编辑:(谢谢,Rob!)

从Xcode 4.4开始,您还可以使用显式的固定底层类型,例如

typedef enum Difficulty : NSUInteger {
    kDifficultyEasy
,   kDifficultyMedium
,   kDifficultyHard
} Difficulty;

答案 1 :(得分:0)

如果你的问题只是使用字符串,你应该声明一个枚举。

写入将由所有控制器导入的Enum.h:

typedef enum
{
    EASY = 0,
    MEDIUM,
    HARD
}   DIFFICULTY;

仅针对某人 - 谁不知道这是什么'信息,这声明了一个限制性整数类型,只能有3个值:EASY(= 0),MEDIUM(= 1),HARD( = 2)。

它会更清晰(并且对你的记忆管理更好)。