Расширение для UIColor с пользовательскими цветами это реально?

У меня есть несколько пользовательских цветов для моего приложения, и теперь оно сохраняется как словарь, но я думаю, что это не очень хорошая идея, и я хочу сделать расширение для UIColor с настраиваемым цветом.

Это может выглядеть так

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

Может быть, мне следует добавить в расширение перечисление с моими цветами?


person Golovanov Dmytrii    schedule 15.02.2018    source источник


Ответы (2)


Создать свойство класса в расширении 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
person RajeshKumar R    schedule 15.02.2018

Использование расширения для расширения цветов — хорошее решение, но если приложение имеет несколько пользовательских цветов, то становится повторяющимся писать /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)
}

Другим элегантным решением было бы использовать enum для определения различных пользовательских цветов, а затем добавить свойство, которое будет возвращать значение 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
person Suhit Patil    schedule 15.02.2018