使用自定义颜色扩展UIColor是真的吗?

时间:2018-02-15 10:57:23

标签: ios swift uicolor swift-extensions

我的应用程序有一些自定义颜色,现在它像字典一样保存,但我认为这不是一个好主意,我想用自定义颜色对UIColor进行扩展。

可能看起来像这样

var newColor = UIColor.MyColor // like UIColor.white

也许我应该用扩展名添加我的颜色枚举?

2 个答案:

答案 0 :(得分:6)

在UIColor扩展

中创建类属性
extension UIColor
{
  class var themeColor:UIColor {
    return UIColor(red: 210.0/255.0, green: 105.0/255.0, blue: 130.0/255.0, alpha: 1.0)
  }
}

extension UIColor {
  static let themeColor = UIColor(red: 210.0/255.0, green: 105.0/255.0, blue: 130.0/255.0, alpha: 1.0)
}

用法

self.view.backgroundColor = UIColor.themeColor

答案 1 :(得分:2)

使用扩展来扩展颜色是一个很好的解决方案,但如果应用程序有多种自定义颜色,那么为每种颜色编写/255.0都会重复。我们可以添加带有RGB值并转换为颜色的扩展名。

extension UIColor {

/// color components value between 0 to 255
  public convenience init(r: Int, g: Int, b: Int, alpha: CGFloat = 1.0) {
    self.init(red: CGFloat(r) / 255.0, green: CGFloat(g) / 255.0, blue: CGFloat(b) / 255.0, alpha: alpha)
  }

  static let customRed: UIColor = UIColor(r: 255, g: 1, b: 1)
}

另一个优雅的解决方案是使用枚举来定义不同的自定义颜色,然后添加一个属性,该属性将使用上面定义的颜色扩展返回UIColor值

enum ColorTheme {
    case customRed
    case customGreen
    case customBlue

    var color: UIColor {
        switch self {
        case .customRed:
            return UIColor(r: 255, g: 1, b: 1)
        case .customGreen:
            return UIColor(r: 1, g: 255, b: 1)
        case .customBlue:
            return UIColor(r: 1, g: 1, b: 255)
        }
    }
}

然后它可以用作

view.backgroundColor = ColorTheme.customRed.color