我正在寻找在视图控制器之间传递难度级别的最佳方法。
目前我将此设置为字符串。 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
方法中传递了值。这种方法的替代方案是什么?虽然这里没有问题,但这样可以正常工作,但这里使用字符串并不是很干净。
答案 0 :(得分:4)
使用枚举来处理Objective-C中的字符串(实际上,在C和C ++中)的一种替代方法:
typedef enum Difficulty {
DIFFICULTY_EASY
, DIFFICULTY_MEDIUM
, DIFFICULTY_HARD
} Difficulty;
在所有视图控制器包含的标头中声明此enum
,并使用枚举常量,就好像它们是数字常量一样。即使您选择在枚举中添加更多项目,该语言也将确保常量保持不变。
当您声明@property
或Difficulty
类型的参数时,请勿使用星号,因为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)。
它会更清晰(并且对你的记忆管理更好)。