如何检查特定的宏是否存在NSString中存储的标识符

时间:2017-01-03 11:55:53

标签: ios objective-c xcode

我有名为

的宏
CONSTANT_1
CONSTANT_2
CONSTANT_3
CONSTANT_4 etc..

我有一个 NSString 变量从另一个类发送,只包含宏名称,如何访问与此NSString匹配的宏变量的内容。

我的NSString变量定义为:

NSString *str=@"CONSTANT_3"

2 个答案:

答案 0 :(得分:4)

1这是一个解决方案,但它需要您了解所有宏:

#define CONSTANT_1 1
#define CONSTANT_2 2
#define CONSTANT_3 3

#define STRINGIZE(x) #x

+ (int)getValueForContant:(NSString *)constantStr {
    const char *charStr = STRINGIZE(CONSTANT_1);
    NSString *str = [NSString stringWithUTF8String:charStr];
    if ([constantStr isEqualToString:str]) {
        return CONSTANT_1;
    }

    charStr = STRINGIZE(CONSTANT_2);
    str = [NSString stringWithUTF8String:charStr];
    if ([constantStr isEqualToString:str]) {
        return CONSTANT_2;
    }

    return -1;
}

并将其用作:

int constVal = [ClassName getValueForContant:@"CONSTANT_1"];

它会给你int值作为回报。

2使用.plist定义常量并循环以获取此方法提供的字符串参数的适当值;

+ (int)getValueForContant:(NSString *)constantStr

答案 1 :(得分:1)

我建议更好地使用常量

RewriteEngine on

RewriteCond %{REQUEST_URI} bar
RewriteRule ^ /index.php [L,R]

您可以使用NSString *const CONSTANT_1 = @"1"; NSString *const CONSTANT_2 = @"2"; NSString *const CONSTANT_3 = @"3";

CFBundleGetDataPointerForName

并使用

之类的方法
-(NSString *)valueOfConstantWithName:(NSString *)constantName {
    void ** pointer = CFBundleGetDataPointerForName(CFBundleGetMainBundle(),   (__bridge CFStringRef)constantName);
    return (__bridge NSString *)(pointer ? *pointer : nil);
}