Swift Utilities — Работа с Динамическими Цветами

от автора

За годы работы разработчиком iOS, я собрал множество инструментов и полезных штук, которые облегчают процесс разработки. В этой статье, я хочу поделиться одним из таких инструментов. Это будет не большая статья. Я покажу, как пользоваться этой утилитой, продемонстрирую её в действии. Надеюсь, что статья окажется полезной для вас.

При разработке приложений, одним из ключевых аспектов является адаптивность интерфейса к различным режимам отображения, особенно к светлой и тёмной теме. Я покажу подход к управлению цветами интерфейса с использованием свойства-обёртки DynamicUIColor

DynamicUIColor

DynamicUIColor — это свойство-обёртка (@propertyWrapper), которое позволяет легко настроить цвета для светлой и тёмной темы интерфейса. В основе работы лежит изменение цветов в зависимости от текущего стиля интерфейса пользователя, который может быть светлым, тёмным или неопределённым.

#if canImport(UIKit)  import UIKit  ///Example: /// ///```swift /// /// @DynamicUIColor( ///     light: UIColor(red: 0, green: 0, blue: 0, alpha: 1), ///     dark: UIColor(red: 1, green: 1, blue: 1, alpha: 1) /// ) var title: UIColor /// /// @DynamicUIColor var subtitle = UIColor(red: 0, green: 0, blue: 0, alpha: 1) ///``` @propertyWrapper public struct DynamicUIColor {        let light: UIColor     let dark: UIColor      public var wrappedValue: UIColor {         UIColor { traitCollection -> UIColor in             switch traitCollection.userInterfaceStyle {             case .dark:                 return self.dark              case .light, .unspecified:                 return self.light              @unknown default:                 return self.light             }         }     }      public init(light: UIColor, dark: UIColor? = nil) {         self.light = light         self.dark = dark ?? light     }      public init(wrappedValue: UIColor) {         self.light = wrappedValue         self.dark = wrappedValue     } }  #endif

Пример использования:

@DynamicUIColor(     light: UIColor(red: 0, green: 0, blue: 0, alpha: 1),     dark: UIColor(red: 1, green: 1, blue: 1, alpha: 1) ) var titleColor: UIColor
@DynamicUIColor var subtitleColor = UIColor(red: 0, green: 0, blue: 0, alpha: 1)

В этих примерах titleColor будет черным в светлой теме и белым в тёмной, а subtitleColor будет черным в обеих темах.

Преимущества и Применение

Использование DynamicUIColor упрощает управление темами в приложении. Оно обеспечивает более чистый и организованный код, уменьшает вероятность ошибок при ручном переключении тем и способствует более легкой поддержке кода.

Еще статьи Swift Utilities:


ссылка на оригинал статьи https://habr.com/ru/articles/774884/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *