gpt4 book ai didi

ios - 从 NSString 获取 UIColor 类型的#define

转载 作者:可可西里 更新时间:2023-11-01 17:08:17 26 4
gpt4 key购买 nike

我定义了以下常量,每个常量代表一个 UIColor:

// Purple
#define PURPLE_COLOR_DARK [UIColor colorWithRed: 0.42 green: 0.25 blue: 0.60 alpha: 1.0]
#define PURPLE_COLOR_LIGHT [UIColor colorWithRed: 0.78 green: 0.47 blue: 0.72 alpha: 1.0]

// Blue
#define BLUE_COLOR_DARK [UIColor colorWithRed: 0.00 green: 0.46 blue: 0.70 alpha: 1.0]
#define BLUE_COLOR_LIGHT [UIColor colorWithRed: 0.00 green: 0.75 blue: 0.88 alpha: 1.0]

// Magenta
#define MAGENTA_COLOR_DARK [UIColor colorWithRed: 0.75 green: 0.00 blue: 0.28 alpha: 1.0]
#define MAGENTA_COLOR_LIGHT [UIColor colorWithRed: 1.00 green: 0.32 blue: 0.61 alpha: 1.0]

问题

如何使用 NSString,如 @"purple"@"blue"@"magenta" 获取相关的“X_COLOR_DARK”或“X_COLOR_LIGHT”常量?甚至可以直接这样做吗?

示例

这是错误的,但应该更清楚地说明我的要求。在此示例中,我有字符串 @"blue" 并且想要导出 BLUE_COLOR_DARKBLUE_COLOR_LIGHT 颜色值。

NSString *color = @"blue";
UIColor *darkColor = (UIColor *)[[NSString stringWithFormat: @"%@_COLOR_DARK", color] uppercaseString];

// Debugging
NSLog(@"%@", darkColor); // BLUE_COLOR_DARK
NSLog(@"%hhd", [lightColor isKindOfClass: [UIColor class]]); // 0
NSLog(@"%hhd", [lightColor isKindOfClass: [NSString class]]); // 1

跟进

请注意,UIColor 不一定与回答问题相关,尽管它对我的情况有帮助。更具体地说,我询问是否可以将与定义的名称匹配的字符串(例如 @"PURPLE_COLOR_DARK"#define PURPLE_COLOR_DARK)解释为定义的名称,而不是使用直接定义名称。

最佳答案

抛弃#defines。并使用 UIColor 类别和 NSSelectorFromString,如 this answer 中所述。 .

或者,创建一个 NSDictionary,其中键是您的颜色名称,对象是您的颜色。然后,您可以通过名称获取 UIColor

例如:

NSDictionary *colors = @{ @"purple_dark"  : PURPLE_COLOR_DARK,
@"purple_light" : PURPLE_COLOR_LIGHT };

NSString *colorName = @"purple";

NSString *lightColorName = [colorName stringByAppendingString:@"_light"];
NSString *darkColorName = [colorName stringByAppendingString:@"_dark"];

UIColor *lightColor = colors[lightColorName];
UIColor *darkColor = colors[darkColorName];

您不能直接使用#defined 名称,因为编译后的代码中不存在这些名称。在编译期间,预处理器会将所有出现的 PURPLE_COLOR_DARK 替换为 [UIColor ...]

关于ios - 从 NSString 获取 UIColor 类型的#define,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18669433/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com