swift 3.0 语法有一定变化,相应字符串截取变化也不小,所以重写了一下取颜色的方法如下:
func transferStringToColor(colorStr:String) -> UIColor {
var color = UIColor.red
var cStr : String = colorStr.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines).uppercased()
if cStr.hasPrefix("#") {
let index = cStr.index(after: cStr.startIndex)
cStr = cStr.substring(from: index)
}
if cStr.characters.count != 6 {
return UIColor.black
}
//两种不同截取字符串的方法
let rRange = cStr.startIndex ..< cStr.index(cStr.startIndex, offsetBy: 2)
let rStr = cStr.substring(with: rRange)
let gRange = cStr.index(cStr.startIndex, offsetBy: 2) ..< cStr.index(cStr.startIndex, offsetBy: 4)
let gStr = cStr.substring(with: gRange)
let bIndex = cStr.index(cStr.endIndex, offsetBy: -2)
let bStr = cStr.substring(from: bIndex)
color = UIColor.init(colorLiteralRed: Float(changeToInt(numStr: rStr)) / 255, green: Float(changeToInt(numStr: gStr)) / 255, blue: Float(changeToInt(numStr: bStr)) / 255, alpha: 1)
return color
}
}
func changeToInt(numStr:String) -> Int {
let str = numStr.uppercased()
var sum = 0
for i in str.utf8 {
//0-9 从48开始
sum = sum * 16 + Int(i) - 48
if i >= 65 {
//A~Z 从65开始,但初始值为10
sum -= 7
}
}
return sum
}当然,最好还是用Scanner来实现十六进制字符串转数字
func transferStringToColor(_ colorStr:String) -> UIColor {
var color = UIColor.red
var cStr : String = colorStr.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines).uppercased()
if cStr.hasPrefix("#") {
let index = cStr.index(after: cStr.startIndex)
cStr = cStr.substring(from: index)
}
if cStr.characters.count != 6 {
return UIColor.black
}
let rRange = cStr.startIndex ..< cStr.index(cStr.startIndex, offsetBy: 2)
let rStr = cStr.substring(with: rRange)
let gRange = cStr.index(cStr.startIndex, offsetBy: 2) ..< cStr.index(cStr.startIndex, offsetBy: 4)
let gStr = cStr.substring(with: gRange)
let bIndex = cStr.index(cStr.endIndex, offsetBy: -2)
let bStr = cStr.substring(from: bIndex)
var r:CUnsignedInt = 0, g:CUnsignedInt = 0, b:CUnsignedInt = 0;
Scanner(string: rStr).scanHexInt32(&r)
Scanner(string: gStr).scanHexInt32(&g)
Scanner(string: bStr).scanHexInt32(&b)
color = UIColor(red: CGFloat(r) / 255.0, green: CGFloat(g) / 255.0, blue: CGFloat(b) / 255.0, alpha: CGFloat(1))
return color
}
本文介绍了一种在Swift 3.0中将颜色字符串转换为UIColor的方法,包括去除空白、统一大小写及处理颜色字符串的前缀等步骤,并提供了使用Scanner进行高效十六进制字符串转数字的实现。

1695

被折叠的 条评论
为什么被折叠?



