Разработка
Поваренная книга SwiftUI: лучшие практики управления состояниями в SwiftUI
Эффективное управление состояниями — ключ к созданию стабильных и отзывчивых приложений в SwiftUI.
Эффективное управление состояниями — ключ к созданию стабильных и отзывчивых приложений в SwiftUI. Ниже приведены некоторые лучшие практики управления состоянием в ваших приложениях SwiftUI:
- Используйте State и Binding для простых локальных состояний.
State
иBinding
идеально подходят для управления простым состоянием, которое локально для представления или может быть передано от родительского представления к дочернему. Помните, что эти обертки свойств предназначены для работы с типами значений. - Для сложных состояний используйте ObservedObject и Published. Если у вас есть более сложное состояние, которое может быть общим для нескольких представлений, рассмотрите возможность использования
ObservedObject
иPublished
в сочетании с отдельным классом управления состоянием. - Используйте EnvironmentObject для совместного использования состояния в несвязанных представлениях. Если вам нужно разделить состояние между несколькими представлениями, которые не связаны напрямую через отношения родитель-ребенок,
EnvironmentObject
может быть хорошим выбором. - Избегайте больших State переменных. Хранение большого количества данных в
State
переменных может привести к проблемам с производительностью, поскольку SwiftUI пересоздает представление при каждом изменении состояния. - Отложите сложные вычисления и побочные эффекты. Избегайте выполнения сложных вычислений или побочных эффектов, например сетевых запросов, непосредственно в структурах представления.
Давайте проиллюстрируем эти лучшие практики на примере простого приложения менеджера задач:
class TaskManager: ObservableObject {
@Published var tasks = [String]()
func addTask(_ task: String) {
tasks.append(task)
}
}
struct TaskListView: View {
@EnvironmentObject var taskManager: TaskManager
@State private var newTask = ""
var body: some View {
NavigationStack {
VStack {
TextField("New task", text: $newTask)
.onSubmit {
if !newTask.isEmpty {
taskManager.addTask(newTask)
newTask = ""
}
}
.padding()
List(taskManager.tasks, id: \.self) { task in
Text(task)
}
}
.navigationTitle("Task List")
}
}
}
struct ContentView: View {
@StateObject var taskManager = TaskManager()
var body: some View {
TaskListView()
.environmentObject(taskManager)
}
}
Ваш предварительный просмотр должен выглядеть следующим образом:
Этот простой менеджер задач иллюстрирует несколько техник управления состоянием SwiftUI.
В этом примере вы создаете класс TaskManager
, который управляет списком задач. Это ObservableObject
, что означает, что SwiftUI будет следить за изменениями его свойств Published
и обновлять все представления, которые зависят от этих свойств. TaskListView
использует EnvironmentObject
для доступа к общему TaskManager
и State
для свойства newTask
, которое является локальным для этого представления. Когда в текстовом поле фиксируется новая задача, она добавляется в диспетчер задач, а текстовое поле очищается.
← Предыдущая статья: Создание и доступ к переменным окружения в SwiftUI
-
Новости3 недели назад
Видео и подкасты о мобильной разработке 2025.14
-
Видео и подкасты для разработчиков4 недели назад
Исследуем мир фото и видео редакторов
-
Новости4 недели назад
Видео и подкасты о мобильной разработке 2025.13
-
Разработка2 недели назад
Конец продуктовой разработки в том виде, в котором мы ее знаем