【问题标题】:Convert a NSString into the name of a Constant将 NSString 转换为常量的名称
【发布时间】:2011-04-04 18:45:16
【问题描述】:

我有一堆这样声明的常量:

#define kConstant0  @"Cow"
#define kConstant1  @"Horse"
#define kConstant2  @"Zebra"

在代码的其他地方,我试图通过在常量的字符串名称中添加一个整数来提取常量值:

int myInt = 1; // (Actual intValue Pulled From Elsewhere)
myLabel.text = [@"kConstant" stringByAppendingString:[NSString stringWithFormat:@"%i",myInt]];

但这当然会返回:

myLabel.text = @"kConstant1";

当我希望它返回时:

myLabel.text = @"Horse";

我不知道如何将 NSString @"kConstant1" 转换为常量名 kConstant1。

感谢任何帮助。 lq

【问题讨论】:

    标签: iphone xcode nsstring constants


    【解决方案1】:

    答案是完全避免使用#defines 来定义常量。改用这样的NSString 常量:

    NSString * const constant1 = @"Cow";
    

    最大的好处是现在常量有了类型并且在类型安全方面更好。

    【讨论】:

    • 它更容易调试,也更干净。随意支持答案;-)。
    【解决方案2】:

    您无法自动执行此操作。您必须将映射存储在 NSDictionary 中,例如

    @implementation MyClass
    static NSDictionary* constants;
    +(void)initialize {
      constants = [[NSDictionary alloc] initWithObjectsAndKeys:
                                         @"kConstant0", @"Cow",
                                         @"kConstant1", @"Horse", ...,
                                         nil];
    }
    ...
    
    NSString* constantName = [kConstant stringByAppendingString:...];
    myLabel.text = [constants objectForKey:constantName];
    

    如果所有这些常量都是kConstantN 的形式,最好只创建一个数组。

    static NSString* kConstants[] = {@"Cow", @"Horse", @"Zebra", ...};
    ...
    
    myLabel.text = kConstants[i];
    

    【讨论】:

    • 成功了,非常感谢。我试图避免为此创建另一个数组,因为我已经有了常量的名称,尽管是 NSString 形式。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-07
    • 1970-01-01
    • 2015-10-30
    • 1970-01-01
    • 1970-01-01
    • 2017-03-08
    相关资源
    最近更新 更多