gpt4 book ai didi

swift - 在 Swift 中将十六进制颜色转换为 RGB 并计算元素

转载 作者:搜寻专家 更新时间:2023-11-01 07:31:30 24 4
gpt4 key购买 nike

我看到一些答案说要在这一行使用 countElementscount,但我在我的代码中遇到了错误:

if (count(cString) != 6) {

“无法使用 String 类型的参数列表调用 count

我尝试了其他一些想法,但没有找到合适的解决方案,有什么想法吗?

这里是完整的函数:

func colorWithHexString (hex:String) -> UIColor {
var cString:String = hex.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet()).uppercaseString

if (cString.hasPrefix("#")) {
cString = (cString as NSString).substringFromIndex(1)
}

if (count(cString) != 6) {
return UIColor.grayColor()
}

var rString = (cString as NSString).substringToIndex(2)
var gString = ((cString as NSString).substringFromIndex(2) as NSString).substringToIndex(2)
var bString = ((cString as NSString).substringFromIndex(4) as NSString).substringToIndex(2)

var r:CUnsignedInt = 0, g:CUnsignedInt = 0, b:CUnsignedInt = 0;
NSScanner(string: rString).scanHexInt(&r)
NSScanner(string: gString).scanHexInt(&g)
NSScanner(string: bString).scanHexInt(&b)


return UIColor(red: CGFloat(r) / 255.0, green: CGFloat(g) / 255.0, blue: CGFloat(b) / 255.0, alpha: CGFloat(1))
}

最佳答案

试试 cString.characters.count

Apple 更新了 Swift 2 中的 String,使其不再符合定义了 countCollectionType 协议(protocol)。相反,Swift 字符串现在通过 characters 属性公开字符集合。

这是因为字符串的行为不一定与其他集合相同 - 例如如果向数组中添加一个数字,您希望该数组的计数增加,但是向字符串中添加某些 unicode 字符(例如重音符号)可能不会增加字符串的长度。

完整的细节在这里https://developer.apple.com/swift/blog/?id=30

修改后的方法是:

func colorWithHexString (hex:String) -> UIColor {
var cString:String = hex.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet()).uppercaseString

if (cString.hasPrefix("#")) {
cString = (cString as NSString).substringFromIndex(1)
}

if (cString.characters.count != 6) {
return UIColor.grayColor()
}

let rString = (cString as NSString).substringToIndex(2)
let gString = ((cString as NSString).substringFromIndex(2) as NSString).substringToIndex(2)
let bString = ((cString as NSString).substringFromIndex(4) as NSString).substringToIndex(2)

var r:CUnsignedInt = 0, g:CUnsignedInt = 0, b:CUnsignedInt = 0;
NSScanner(string: rString).scanHexInt(&r)
NSScanner(string: gString).scanHexInt(&g)
NSScanner(string: bString).scanHexInt(&b)


return UIColor(red: CGFloat(r) / 255.0, green: CGFloat(g) / 255.0, blue: CGFloat(b) / 255.0, alpha: CGFloat(1))
}

注意一些 vars 已经变成了 let 因为它们永远不会发生变化

关于swift - 在 Swift 中将十六进制颜色转换为 RGB 并计算元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32297775/

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