1

我有一本带有颜色设置的字典并尝试了这个:

#define ColorWithString( x) [UIColor #x]

NSDictionary *settings = @{@"color" : @"whiteColor"};
UIColor *color = ColorWithString(settings[@"color"]);

我得到一个错误Expected identifier

我知道字符串预处理有一些微妙之处。也许甚至不可能向班级发送动态消息。有什么建议可以完成这项工作吗?

4

2 回答 2

4

看看你的宏扩展成什么:

UIColor *color = [UIColor settings[@"color"]];

这显然不是合法的 Objective-C 代码。我认为您可以performSelector:结合使用NSSelectorFromString

UIColor *color = [UIColor performSelector:
    NSSelectorFromString(settings[@"color"])];

...但为什么不简单地这样做呢?

NSDictionary *colors = @{
    @"white" : [UIColor whiteColor],
    @"red"   : [UIColor redColor]
};
于 2012-11-01T08:40:05.957 回答
2

将您的宏更改为

#define ColorWithString( x) [UIColor performSelector:NSSelectorFromString(x)]

然后你可以使用宏作为

        NSDictionary *settings = @{@"color" : @"greenColor"};        
        UIColor *color = ColorWithString(settings[@"color"]);

CGColorRef一个UIColor

CGColorRef colorRef = color.CGColor;
于 2012-11-01T08:53:41.967 回答