首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Swift 3.0中将字符串转换为UIColor?

如何在Swift 3.0中将字符串转换为UIColor?
EN

Stack Overflow用户
提问于 2016-12-15 19:23:12
回答 4查看 5.9K关注 0票数 3

我正在尝试将一个使用预定义颜色列表的现有程序从Objective-C转换为Swift。原始代码使用选择器根据表示为NSString的名称提取UIColor

代码语言:javascript
运行
复制
#define UIColorFromRGB(rgbValue) [UIColor colorWithRed:((float)((rgbValue & 0xFF0000) >> 16))/255.0 green:((float)((rgbValue & 0xFF00) >> 8))/255.0 blue:((float)(rgbValue & 0xFF))/255.0 alpha:1.0]

-(UIColor *)getColor:(NSString*)colorName
{
    SEL selColor = NSSelectorFromString(colorName);
    NSString *errorMessage = [NSString stringWithFormat:@"Invalid color name: %@ !!!", colorName];
    NSAssert([UIColor respondsToSelector:selColor] == YES, errorMessage);
    UIColor *mycolor = [UIColor performSelector:selColor];
    return mycolor;
}

+ (instancetype)turquoiseColor {
    return UIColorFromRGB(0x40E0D0);
}

+ (instancetype)mediumTurquoiseColor {
    return UIColorFromRGB(0x48D1CC);
}

然而,我一直无法弄清楚如何使用Swift 3.0实现相同的功能,或者使用Selector是否是最好的技术。

代码语言:javascript
运行
复制
func UIColorFromRGB(_ rgbValue: UInt) -> UIColor {
    return UIColor(
        red: CGFloat((rgbValue & 0xFF0000) >> 16) / 255.0,
        green: CGFloat((rgbValue & 0x00FF00) >> 8) / 255.0,
        blue: CGFloat(rgbValue & 0x0000FF) / 255.0,
        alpha: CGFloat(1.0)
    )
}

extension UIColor {
    public class var turquoise: UIColor { return UIColorFromRGB(0x40E0D0) }
}

extension UIColor {
    public class var mediumTurquoise: UIColor { return UIColorFromRGB(0x48D1CC) }
}

let myColor: UIColor = .turquoise

let name: String = "turquoise"
let colorName = "UIColor.\(name)"
let selector: Selector = NSSelectorFromString(colorName)

let colorSelected: UIColor = UIColor.perform(selector!)

错误:!没有'perform‘候选对象生成预期的上下文结果类型'UIColor'

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41162951

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档