在Swift和count元素中将十六进制颜色转换为RGB
我看到一些答案说在这一行中使用在Swift和count元素中将十六进制颜色转换为RGB,swift,swift2,uicolor,Swift,Swift2,Uicolor,我看到一些答案说在这一行中使用countElements或count,但我的代码中有错误: if(计数(cString)!=6){ 说“不能使用字符串类型的参数列表调用count” 我尝试过其他一些想法,但没有找到正确的解决方案,有什么想法吗 以下是完整的功能: func colorWithHexString (hex:String) -> UIColor { var cString:String = hex.stringByTrimmingCharactersInSet(NSCh
countElements
或count
,但我的代码中有错误:
if(计数(cString)!=6){
说“不能使用字符串类型的参数列表调用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
苹果公司在Swift 2中更新了String
,使其不再符合CollectionType
协议,该协议定义了count
。相反,Swift字符串现在通过characters
属性公开字符集合
这是因为字符串的行为不一定像其他集合—例如,如果向数组中添加数字,则该数组的计数会增加,但向字符串中添加某些unicode字符(例如重音符号)可能不会增加
增加字符串的长度
详细信息在这里
经修正的方法是:
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
s,因为当我尝试时,它们从未发生过变异:if(cString.characters.count!=6){return UIColor.grayColor()}…它会给我诸如“Expected,
分隔符”之类的错误在第一行。如果我真的添加了,
,那么这一行仍然有一个错误,告诉我“!=
不是前缀一元运算符错误”…有什么想法吗?奇怪,这一测试对我来说很有效。我想你的代码中可能有其他地方的拼写错误。试着创建一个简单的方法,只使用字符来检查字符串的长度,看看你是否得到相同的错误是有意义的!谢谢!!我想知道为什么人们总是坚持将颜色定义为字符串。如果你一直在使用整数。