Swift String to UIColor (支持3,4,6,8长度的16进制颜色值)

时间:2022-10-30 08:46:22
import UIKit       extension UIColor {   public convenience init(rgba: String) {   var red: CGFloat = 0 . 0   var green: CGFloat = 0 . 0   var blue: CGFloat = 0 . 0   var alpha: CGFloat = 1 . 0       if rgba .hasPrefix( "#") {   let index = advance(rgba .startIndex, 1)   let hex = rgba .substringFromIndex(index)   let scanner = NSScanner(string: hex)   var hexValue: CUnsignedLongLong = 0   if scanner .scanHexLongLong( &hexValue) {   switch (count(hex)) {   case 3:   red = CGFloat((hexValue & 0xF00) >> 8) / 15 . 0   green = CGFloat((hexValue & 0x0F0) >> 4) / 15 . 0   blue = CGFloat(hexValue & 0x00F) / 15 . 0   case 4:   red = CGFloat((hexValue & 0xF000) >> 12) / 15 . 0   green = CGFloat((hexValue & 0x0F00) >> 8) / 15 . 0   blue = CGFloat((hexValue & 0x00F0) >> 4) / 15 . 0   alpha = CGFloat(hexValue & 0x000F) / 15 . 0   case 6:   red = CGFloat((hexValue & 0xFF0000) >> 16) / 255 . 0   green = CGFloat((hexValue & 0x00FF00) >> 8) / 255 . 0   blue = CGFloat(hexValue & 0x0000FF) / 255 . 0   case 8:   red = CGFloat((hexValue & 0xFF000000) >> 24) / 255 . 0   green = CGFloat((hexValue & 0x00FF0000) >> 16) / 255 . 0   blue = CGFloat((hexValue & 0x0000FF00) >> 8) / 255 . 0   alpha = CGFloat(hexValue & 0x000000FF) / 255 . 0   default:   print( "Invalid RGB string, number of characters after '#' should be either 3, 4, 6 or 8")   }   } else {   println( "Scan hex error" )   }   } else {   print( "Invalid RGB string, missing '#' as prefix")   }   self . init(red:red, green:green, blue:blue, alpha:alpha)   }   }