OBJ C Macro by Stringname

时间:2014-02-04 10:45:33

标签: objective-c macros

我尝试通过NSString值获取宏:

示例:

#define FOO1 NSLocalizedString (@"TEXT",@"COMMENT")
#define FOO2 NSLocalizedString (@"TEXT2",@"COMMENT2")
<。>文件:

NSString *macroName = [NSString stringWithFormat:"FOO%d",1];

label.text = MACROBYNAME(macroName);

有没有办法做这样的事情?

解决方案的另一种方法是宏中的Switch-Case,如下所示:

#define FOOSELECTOR(x) Switch x 
case "FOO1"
NSLocalizedString (@"TEXT",@"COMMENT")
break; 

case "FOO2"
NSLocalizedString (@"TEXT2",@"COMMENT2")
break; 

或类似的......任何想法?

1 个答案:

答案 0 :(得分:0)

好的,我会咬一口,把它作为答案而不是评论:

不,这是不可能的。没有办法做你想做的事。

宏在编译期间进行评估,即在Xcode中点击cmd-b时。在运行时调用函数。这是程序运行的时间,可能是编译后的几年。

此外,你为什么要这样做?

有什么问题
NSString *localizedString = NSLocalizedString (@"TEXT",@"COMMENT");
label.text = [NSString stringWithFormat:@"%@%d", localizedString, 1];