我有名为
的宏CONSTANT_1
CONSTANT_2
CONSTANT_3
CONSTANT_4 etc..
我有一个 NSString 变量从另一个类发送,只包含宏名称,如何访问与此NSString匹配的宏变量的内容。
我的NSString变量定义为:
NSString *str=@"CONSTANT_3"
答案 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);
}