Как в SwiftUI использовать Environment для управления конфигурацией приложения?

«Как в SwiftUI использовать Environment для управления конфигурацией приложения?» — вопрос из категории SwiftUI, который задают на 10% собеседований IOS Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В SwiftUI Environment — это механизм для сквозной передачи зависимостей. Для конфигурации сред (dev/staging/prod) его используют через кастомные EnvironmentKey или внедрение observable-объекта.

Практический пример с EnvironmentObject:

  1. Модель конфигурации:

    class AppConfig: ObservableObject {
        @Published var environment: AppEnvironment = .production
    
        var apiBaseURL: URL {
            switch environment {
                case .development: return URL(string: "https://dev.api.com")!
                case .staging: return URL(string: "https://staging.api.com")!
                case .production: return URL(string: "https://api.com")!
            }
        }
    }
    enum AppEnvironment { case development, staging, production }
  2. Внедрение в корень приложения:

    @main
    struct MyApp: App {
        @StateObject private var config = AppConfig()
    
        var body: some Scene {
            WindowGroup {
                ContentView()
                    .environmentObject(config) // Теперь доступно во всей иерархии
            }
        }
    }
  3. Использование во View:

    struct NetworkView: View {
        @EnvironmentObject var config: AppConfig
    
        var body: some View {
            Text("API: (config.apiBaseURL.host ?? "")")
        }
    }

Преимущества: Чистое разделение конфигурации, лёгкое переключение сред для тестирования, централизованное управление.