我看到一些答案说要在这一行使用 countElements
或 count
,但我在我的代码中遇到了错误:
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
,使其不再符合定义了 count
的 CollectionType
协议(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/