我正在尝试解决以下问题。我的头文件中有以下常量:
#define PREFS_MY_CONSTANT_1 @"bla1"
#define PREFS_MY_CONSTANT_2 @"bla2"
#define PREFS_MY_CONSTANT_3 @"bla3"
...
在我的一个函数中,我想根据用户输入打印到UI按钮中的一个字符串,所以说用户输入'1',我会显示bla1。而不是创建一个巨大的开关(我有100个),我正在寻找一种方法来将常量与保存用户输入的变量结合起来,所以理想情况下这样:
NSInteger input;
[button setTitle:PREFS_MY_CONSTANT_{$input} forState: UIControlStateNormal];
这样的事情可能吗?什么是解决这个问题的最好方法?
答案 0 :(得分:4)
我定义了一个NSString文字的普通C数组:
static NSString *prefs[] = {
@"foo",
@"bar",
@"baz",
};
要么使用基于0的索引,要么将某些内容放在您不会使用的第一个条目中,例如nil
。然后prefs[input]
将为您提供所需的字符串。
(最后一个条目后的逗号不是错误。它允许您添加更多条目而无需先添加逗号。它使编辑更容易,并使修订历史更容易阅读。)
可以在编译时确定静态数组中的元素数。我通常使用一个宏:
#define ARRAYSIZE(array) (sizeof(array) / sizeof(array[0]))
然后,您可以将用户输入与ARRAYSIZE(prefs)
进行比较,以确保其保持在范围内。
答案 1 :(得分:2)
另一种方法是使用NSArray
。
创建一个这样的数组:
NSArray *titleArray = [[NSArray alloc] initWithObjects:@"bla1",@"bla2",@"bla3", nil];
您可以按照以下方式设置按钮标题:
[button setTitle:[titleArray objectAtIndex:input] forState: UIControlStateNormal];
答案 2 :(得分:0)
为此,NSString
为
NSString *input = [NSString stringWithFormat:@"PREFS_MY_CONSTANT_%@",input];
[button setTitle:input forState: UIControlStateNormal];
or
[button setTitle:[NSString stringWithFormat:@"PREFS_MY_CONSTANT_%@",input] forState: UIControlStateNormal];
让我知道它是否有用。
谢谢和问候, 阿尼尔