You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在NSMutableArray中存储字符串形式的UIColor无法显示颜色求助

解决字符串形式UIColor转实际对象的问题

嘿,我懂你现在的处境——因为某些原因把UIColor的初始化代码以字符串存在了NSMutableArray里,现在没法直接用这些字符串来显示颜色对吧?这里有两个实用的解决方案,你可以根据自己的需求来选:

方法一:用NSExpression直接解析表达式(简单省心)

NSExpression可以直接解析并执行你这种格式的字符串,返回对应的UIColor实例,代码很简洁:

NSMutableArray *actualColorArr = [NSMutableArray array];
for (NSString *colorStr in bgColorArr) {
    // 把字符串转成表达式并计算
    NSExpression *expression = [NSExpression expressionWithFormat:colorStr];
    UIColor *color = [expression expressionValueWithObject:nil context:nil];
    if (color) {
        [actualColorArr addObject:color];
    }
}
// 之后就可以用actualColorArr里的UIColor对象来设置背景色啦

这个方法不需要手动拆分RGB值,系统帮你搞定一切,而且相比直接执行代码的方式更安全,适合你这种自己生成字符串的场景。

方法二:手动解析RGB值(完全可控,安全性更高)

如果你担心表达式执行的风险(比如字符串来源不可信的情况),可以用正则表达式把字符串里的颜色参数提取出来,手动创建UIColor:

NSMutableArray *actualColorArr = [NSMutableArray array];
// 匹配RGB和alpha值的正则表达式
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"red:(\\d+\\.\\d+) green:(\\d+\\.\\d+) blue:(\\d+\\.\\d+) alpha:(\\d+\\.\\d+)" options:0 error:nil];

for (NSString *colorStr in bgColorArr) {
    NSTextCheckingResult *match = [regex firstMatchInString:colorStr options:0 range:NSMakeRange(0, colorStr.length)];
    if (match && match.numberOfRanges == 5) {
        // 提取各个颜色分量的浮点值
        CGFloat red = [[colorStr substringWithRange:[match rangeAtIndex:1]] floatValue];
        CGFloat green = [[colorStr substringWithRange:[match rangeAtIndex:2]] floatValue];
        CGFloat blue = [[colorStr substringWithRange:[match rangeAtIndex:3]] floatValue];
        CGFloat alpha = [[colorStr substringWithRange:[match rangeAtIndex:4]] floatValue];
        
        // 创建实际的UIColor对象
        UIColor *color = [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
        [actualColorArr addObject:color];
    }
}

这种方式完全不会执行任何代码,只是提取数值再初始化,安全性拉满,适合对可控性要求高的场景。

另外提一句:如果之后有机会的话,尽量直接在容器里存储UIColor对象(比如通过NSCoding归档、或者用Core Data存储时设置对应的属性类型),这样就不用再折腾字符串转对象的操作啦。

内容的提问来源于stack exchange,提问作者Madhu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:18:41