Чтобы приблизиться к тому, что вы хотите сделать, рассмотрите возможность использования функции для возврата цвета с заданным оттенком, а затем используйте аргументы по умолчанию, например:
extension UIColor {
enum MyColor {
case blue
enum Shade { case normal, light, dark }
func shade(_ shade: Shade) -> UIColor {
switch self {
case .blue:
switch shade {
case .normal: return .init(netHex: 0x000099)
case .light: return .init(netHex: 0x0066cc)
case .dark: return .init(netHex: 0x000066)
}
}
}
}
static func my(_ color: MyColor, shade: MyColor.Shade = .normal) -> UIColor {
return color.shade(shade)
}
}
Синтаксис для использования будет немного другим:
let myBlue = UIColor.my(.blue)
В качестве бонуса вы можете добавить их к MyColor
:
var normal: UIColor { shade(.normal) }
var light: UIColor { shade(.light) }
var dark: UIColor { shade(.dark) }
Затем вы можете сделать UIColor.MyColor.blue.dark
, как раньше.
Однако , вместо этого я бы предложил просто добавить сами цвета как UIColor
расширения:
extension UIColor {
static let myBlue = UIColor(named: "blue")
static let myLightBlue = UIColor(named: "lightBlue")
static let myDarkBlue = UIColor(named: "darkBlue")
}
Это даже позволяет вам использовать сокращение, например:
label.textColor = .myBlue