Connect with us

Разработка

Поваренная книга SwiftUI: создание и доступ к переменным окружения в SwiftUI

Используя переменные окружения, вы можете эффективно обмениваться общими данными о состоянии и поведении между представлениями.

Фото аватара

Опубликовано

/

     
     

Управление состоянием пользовательского интерфейса — важнейшая часть любого приложения SwiftUI. В SwiftUI переменные окружения (environment values) являются одним из механизмов, предоставляемых для работы с общим состоянием нескольких представлений. Переменные окружения могут быть доступны или установлены из любого места в иерархии представлений и особенно полезны для совместного использования общих данных или функциональности.

Рассмотрим пример, в котором вы создаете пользовательское значение окружения для динамического изменения темы вашего приложения:

// Defining a custom environment value
struct ThemeKey: EnvironmentKey {
  static let defaultValue: Theme = .light
}

extension EnvironmentValues {
  var theme: Theme {
    get { self[ThemeKey.self] }
    set { self[ThemeKey.self] = newValue }
  }
}

// Enum for the different themes
enum Theme {
  case light, dark
}

extension View {
  func theme(_ theme: Theme) -> some View {
    environment(\.theme, theme)
  }
}

struct ThemedView: View {
  @Environment(\.theme) var theme: Theme

  var body: some View {
    VStack {
      if theme == .light {
        Text("Light Theme")
          .foregroundColor(.black)
          .background(Color.white)
      } else {
        Text("Dark Theme")
          .foregroundColor(.white)
          .background(.black)
      }
    }
    .padding()
  }
}

struct ContentView: View {
  @State var theme: Theme = .light

  var body: some View {
    VStack {
      Button("Switch Theme") {
        // Setting our custom environment value
        switch theme {
        case .dark:
          theme = .light
        case .light:
          theme = .dark
        }
      }
      ThemedView()
    }
    .theme(theme)
  }
}

Предварительный просмотр для этого кода должен быть таким:

Поваренная книга SwiftUI: создание и доступ к переменным окружения в SwiftUI

Вы можете создать пользовательскую переменную среды для совместного использования состояния в разных представлениях.

В приведенном выше коде:

  • ThemeKey — это пользовательский EnvironmentKey со значением по умолчанию .light. Он используется для задания темы по умолчанию для среды.
  • Расширение EnvironmentValues включает новое свойство theme. Оно использует ваш ключ ThemeKey для получения или установки темы.
  • Theme — это перечисление, которое описывает возможные темы, а именно lightи dark.
  • Расширение метода theme для View позволяет применить тему к любому представлению, установив значение окружения theme.
  • ThemedView — это представление, которое настраивает свой внешний вид в зависимости от текущего значения theme. Оно считывает это значение с помощью обертки свойства @Environment.
  • ContentView содержит кнопку, которая переключает тему между светлой и темной. Это изменение передается в ThemedView через значение переменной окружения theme.

Используя переменные окружения, вы можете эффективно обмениваться общими данными о состоянии и поведении между представлениями, упрощая код и делая представления пригодными для переиспользования.

← Предыдущая статья: Использование AppStorage и SceneStorage для хранения состояния

Источник

Если вы нашли опечатку - выделите ее и нажмите Ctrl + Enter! Для связи с нами вы можете использовать info@apptractor.ru.
Advertisement

Наши партнеры:

LEGALBET

Мобильные приложения для ставок на спорт
Telegram

Популярное

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: