这里有一个不错的方法,使用 Swift 的特性(扩展、计算属性和元组)在几行代码中完成相同的操作。
extension UIColor {
var hsba: (h: CGFloat, s: CGFloat, b: CGFloat, a: CGFloat) {
var hsba: (h: CGFloat, s: CGFloat, b: CGFloat, a: CGFloat) = (0, 0, 0, 0)
self.getHue(&(hsba.h), saturation: &(hsba.s), brightness: &(hsba.b), alpha: &(hsba.a))
return hsba
}
}
Swift 3.2 / 4小更新
在Swift 3.2 / 4中,使用先前的代码会触发一个新的警告,因为您在同一次对getHue
的调用中多次修改了hsba
变量。
同时访问参数'hsba',但修改需要独占访问; 考虑将其复制到本地变量。
extension UIColor {
var hsba: (h: CGFloat, s: CGFloat, b: CGFloat, a: CGFloat) {
var h: CGFloat = 0, s: CGFloat = 0, b: CGFloat = 0, a: CGFloat = 0
self.getHue(&h, saturation: &s, brightness: &b, alpha: &a)
return (h: h, s: s, b: b, a: a)
}
}