如何从像"rgb(0,0,0)"这样的字符串创建UIColor?

Ant*_*nin -2 parsing uicolor ios swift

我有一个来自服务器的字符串,格式为"rgb(0,0,0)",应该在某些UI元素上使用.

主要问题是各种颜色,如"rgb(20,120,4)"等.

有没有办法在类似的东西中解析它UIColor(red: 0, green: 0, blue: 0, alpha: 1)

Mar*_*n R 5

有这么多可能的解决方案!这是一个使用 NSScanner:

extension UIColor {
    convenience init?(rgbString : String) {
        var red = 0.0
        var green = 0.0
        var blue = 0.0

        let scanner = NSScanner(string : rgbString)
        guard scanner.scanString("rgb(", intoString: nil)
            && scanner.scanDouble(&red)
            && scanner.scanString(",", intoString: nil)
            && scanner.scanDouble(&green)
            && scanner.scanString(",", intoString: nil)
            && scanner.scanDouble(&blue)
            && scanner.scanString(")", intoString: nil) else {
                return nil
        }
        self.init(red: CGFloat(red/255.0), green: CGFloat(green/255.0), blue: CGFloat(blue/255.0), alpha: 1.0)
    }
}
Run Code Online (Sandbox Code Playgroud)

用法示例:

if let col = UIColor(rgbString: "rgb(20,120.5, 4)") {
    print(col)
} else {
    print("invalid color specification")
}
Run Code Online (Sandbox Code Playgroud)

Swift 3/4更新:

extension UIColor {
    convenience init?(rgbString: String) {
        var red = 0.0
        var green = 0.0
        var blue = 0.0

        let scanner = Scanner(string: rgbString)
        guard scanner.scanString("rgb(", into: nil)
            && scanner.scanDouble(&red)
            && scanner.scanString(",", into: nil)
            && scanner.scanDouble(&green)
            && scanner.scanString(",", into: nil)
            && scanner.scanDouble(&blue)
            && scanner.scanString(")", into: nil) else {
                return nil
        }
        self.init(red: CGFloat(red/255.0), green: CGFloat(green/255.0), blue: CGFloat(blue/255.0), alpha: 1.0)
    }
}
Run Code Online (Sandbox Code Playgroud)