Использование состояния и зависимостей
August 26, 2025 · View on GitHub
AppState предоставляет мощные инструменты для управления состоянием в масштабах всего приложения и внедрения зависимостей в представления SwiftUI. Централизуя свое состояние и зависимости, вы можете обеспечить согласованность и удобство сопровождения вашего приложения.
Обзор
- Состояние: представляет значение, которое можно совместно использовать в приложении. Значения состояния можно изменять и наблюдать в представлениях SwiftUI.
- Зависимость: представляет собой общий ресурс или службу, которую можно внедрять и получать доступ в представлениях SwiftUI.
Ключевые особенности
- Централизованное состояние: определяйте и управляйте состоянием в масштабах всего приложения в одном месте.
- Внедрение зависимостей: внедряйте и получайте доступ к общим службам и ресурсам в различных компонентах вашего приложения.
Пример использования
Определение состояния приложения
Чтобы определить состояние в масштабах всего приложения, расширьте объект Application и объявите свойства состояния.
import AppState
struct User {
var name: String
var isLoggedIn: Bool
}
extension Application {
var user: State<User> {
state(initial: User(name: "Guest", isLoggedIn: false))
}
}
Доступ и изменение состояния в представлении
Вы можете получать доступ и изменять значения состояния непосредственно в представлении SwiftUI с помощью обертки свойства @AppState.
import AppState
import SwiftUI
struct ContentView: View {
@AppState(\.user) var user: User
var body: some View {
VStack {
Text("Привет, \(user.name)!")
Button("Войти") {
user.name = "John Doe"
user.isLoggedIn = true
}
}
}
}
Определение зависимостей
Вы можете определить общие ресурсы, такие как сетевая служба, как зависимости в объекте Application. Эти зависимости можно внедрять в представления SwiftUI.
import AppState
protocol NetworkServiceType {
func fetchData() -> String
}
class NetworkService: NetworkServiceType {
func fetchData() -> String {
return "Data from network"
}
}
extension Application {
var networkService: Dependency<NetworkServiceType> {
dependency(NetworkService())
}
}
Доступ к зависимостям в представлении
Получайте доступ к зависимостям в представлении SwiftUI с помощью обертки свойства @AppDependency. Это позволяет внедрять службы, такие как сетевая служба, в ваше представление.
import AppState
import SwiftUI
struct NetworkView: View {
@AppDependency(\.networkService) var networkService: NetworkServiceType
var body: some View {
VStack {
Text("Данные: \(networkService.fetchData())")
}
}
}
Объединение состояния и зависимостей в представлении
Состояние и зависимости могут работать вместе для создания более сложной логики приложения. Например, вы можете получать данные из службы и обновлять состояние:
import AppState
import SwiftUI
struct CombinedView: View {
@AppState(\.user) var user: User
@AppDependency(\.networkService) var networkService: NetworkServiceType
var body: some View {
VStack {
Text("Пользователь: \(user.name)")
Button("Получить данные") {
user.name = networkService.fetchData()
user.isLoggedIn = true
}
}
}
}
Лучшие практики
- Централизуйте состояние: храните состояние вашего приложения в одном месте, чтобы избежать дублирования и обеспечить согласованность.
- Используйте зависимости для общих служб: внедряйте зависимости, такие как сетевые службы, базы данных или другие общие ресурсы, чтобы избежать тесной связи между компонентами.
Заключение
С помощью AppState вы можете управлять состоянием в масштабах всего приложения и внедрять общие зависимости непосредственно в ваши представления SwiftUI. Этот шаблон помогает сохранить модульность и удобство сопровождения вашего приложения. Изучите другие функции библиотеки AppState, такие как SecureState и SyncState, чтобы еще больше улучшить управление состоянием вашего приложения.
Этот перевод был сгенерирован автоматически и может содержать ошибки. Если вы носитель языка, мы будем признательны за ваши исправления через Pull Request.