Last edited February 16, 2019
Colors.swift file with contents like: import UIKit enum ButtonAppearance { static let backgroundColor = UIColor.white static let borderColor = UIColor.gray static let textColor = UIColor.black } enum without a single case - frankly, my favorite type structure for declaring constants. With this use, it automatically prevents us from creating instances of the type and generally using the type in any way other than the intended method.) let someButton = UIButton() someButton.backgroundColor = ButtonAppearance.backgroundColor someButton.layer.borderColor = ButtonAppearance.borderColor.cgColor struct SchemeColor { private let color: UIColor func uiColor() -> UIColor { return color } func cgColor() -> CGColor { return color.cgColor } } extension for UIColor : extension UIColor { func schemeColor() -> SchemeColor { return SchemeColor(color: self) } } enum ButtonAppearance { static let backgroundColor = UIColor.white.schemeColor() static let borderColor = UIColor.gray.schemeColor() static let textColor = UIColor.black.schemeColor() } let someButton = UIButton() someButton.backgroundColor = ButtonAppearance.backgroundColor.uiColor() someButton.layer.borderColor = ButtonAppearance.borderColor.cgColor() enum : enum ColorSchemeOption { case dark case light } struct ColorScheme { static let shared = ColorScheme() private (set) var schemeOption: ColorSchemeOption private init() { /* , option. , UserDefaults , . */ } } SchemeColor and make it private .SchemeColor itself SchemeColor to be modified in order for it to be aware of which color scheme the application uses and return the desired color: struct SchemeColor { let dark: UIColor let light: UIColor func uiColor() -> UIColor { return colorWith(scheme: ColorScheme.shared.schemeOption) } func cgColor() -> CGColor { return uiColor().cgColor } private func colorWith(scheme: ColorSchemeOption) -> UIColor { switch scheme { case .dark: return dark case .light: return light } } // ColorScheme } enum ButtonAppearance { static let backgroundColor = SchemeColor(dark: Dark.backgroundColor, light: Light.backgroundColor) static let borderColor = SchemeColor(dark: Dark.borderColor, light: Light.borderColor) static let textColor = SchemeColor(dark: Dark.textColor, light: Light.textColor) private enum Light { static let backgroundColor = UIColor.white static let borderColor = UIColor.gray static let textColor = UIColor.black } private enum Dark { static let backgroundColor = UIColor.lightGray static let borderColor = UIColor.gray static let textColor = UIColor.black } } extension for UIColor does not seem to be needed anymore.) let someButton = UIButton() someButton.backgroundColor = ButtonAppearance.backgroundColor.uiColor() someButton.layer.borderColor = ButtonAppearance.borderColor.cgColor() case to ColorSchemeOption , a set of colors for this color scheme in color constants and update SchemeColor .Source: https://habr.com/ru/post/349348/
All Articles