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

Sar*_*ith 6 xcode objective-c ios

我有名字的宏

CONSTANT_1
CONSTANT_2
CONSTANT_3
CONSTANT_4 etc..
Run Code Online (Sandbox Code Playgroud)

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

我的NSString变量定义为:

NSString *str=@"CONSTANT_3"
Run Code Online (Sandbox Code Playgroud)

D4t*_*aya 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;
}
Run Code Online (Sandbox Code Playgroud)

并将其用作:

int constVal = [ClassName getValueForContant:@"CONSTANT_1"];
Run Code Online (Sandbox Code Playgroud)

它会给你带来int价值回报。

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

+ (int)getValueForContant:(NSString *)constantStr
Run Code Online (Sandbox Code Playgroud)