Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
extension UIColor
{
@nonobjc class var backgroundSecondary: UIColor
{
return SchemeColor(classic: BACKGROUND_SECONDARY_COLOR_CLASSIC,
dark: BACKGROUND_SECONDARY_COLOR_DARK).color()
}
}
navigationController?.navigationBar.barTintColor = .backgroundSecondary let backgroundSecondaryColor = SchemeColor(classic: BACKGROUND_SECONDARY_COLOR_CLASSIC,
dark: BACKGROUND_SECONDARY_COLOR_DARK)
navigationController?.navigationBar.barTintColor = backgroundSecondaryColor.color()protocol ColorTheme {
var main: UIColor { get }
}
struct DarkTheme: ColorTheme {
var main: UIColor {
return .black
}
}
struct ClassicTheme: ColorTheme {
var main: UIColor {
return .white
}
}
final class ColorScheme {
// MARK: - Properties
static let shared = ColorScheme()
var theme: ColorTheme
}
extension UIColor
{
@nonobjc class var backgroundSecondary: UIColor
{
return ColorScheme.shared.theme.main
}
}
extension ColorScheme: ColorTheme {
var main: UIColor {
return theme.main
}
}
extension UIColor
{
@nonobjc class var backgroundSecondary: UIColor
{
return ColorScheme.shared.main
}
}
Жаль, что вас не смущает дублирование кода в структурах ButtonAppearanceLight и ButtonAppearanceDark. По хорошему вам нужна одна структура ButtonAppearance и в ней свойства должны быть не static-ами. А в энуме ColorSchemeOption к кейсам (которые, кстати, Apple рекомендует называть НЕ капсом) добавить associatied value типа ButtonAppearance (внезапно, да?) Чтоб получилось что-то типа такого:
enum ColorSchemeOption {
case dark(buttonAppearance: ButtonAppearance)
case light(buttonAppearance: ButtonAppearance)
}Я использую http://classykit.github.io/Classy/
Способ управления цветовыми схемами «Swift» «iOS»-приложения