Использование Slice и OptionalSlice
August 26, 2025 · View on GitHub
Slice и OptionalSlice — это компоненты библиотеки AppState, которые позволяют вам получать доступ к определенным частям состояния вашего приложения. Они полезны, когда вам нужно манипулировать или наблюдать за частью более сложной структуры состояния.
Обзор
- Slice: позволяет получать доступ и изменять определенную часть существующего объекта
State. - OptionalSlice: работает аналогично
Slice, но предназначен для обработки необязательных значений, например, когда часть вашего состояния может бытьnilили нет.
Ключевые особенности
- Выборочный доступ к состоянию: получайте доступ только к той части состояния, которая вам нужна.
- Потокобезопасность: как и другие типы управления состоянием в AppState,
SliceиOptionalSliceявляются потокобезопасными. - Реактивность: представления SwiftUI обновляются при изменении среза состояния, обеспечивая реактивность вашего пользовательского интерфейса.
Пример использования
Использование Slice
В этом примере мы используем Slice для доступа и обновления определенной части состояния — в данном случае, username из более сложного объекта User, хранящегося в состоянии приложения.
import AppState
import SwiftUI
struct User {
var username: String
var email: String
}
extension Application {
var user: State<User> {
state(initial: User(username: "Guest", email: "guest@example.com"))
}
}
struct SlicingView: View {
@Slice(\.user, \.username) var username: String
var body: some View {
VStack {
Text("Имя пользователя: \(username)")
Button("Обновить имя пользователя") {
username = "NewUsername"
}
}
}
}
Использование OptionalSlice
OptionalSlice полезен, когда часть вашего состояния может быть nil. В этом примере сам объект User может быть nil, поэтому мы используем OptionalSlice для безопасной обработки этого случая.
import AppState
import SwiftUI
extension Application {
var user: State<User?> {
state(initial: nil)
}
}
struct OptionalSlicingView: View {
@OptionalSlice(\.user, \.username) var username: String?
var body: some View {
VStack {
if let username = username {
Text("Имя пользователя: \(username)")
} else {
Text("Имя пользователя недоступно")
}
Button("Установить имя пользователя") {
username = "UpdatedUsername"
}
}
}
}
Лучшие практики
- Используйте
Sliceдля необязательного состояния: если ваше состояние гарантированно не является необязательным, используйтеSliceдля доступа к нему и его обновления. - Используйте
OptionalSliceдля необязательного состояния: если ваше состояние или часть состояния является необязательной, используйтеOptionalSliceдля обработки случаев, когда значение может бытьnil. - Потокобезопасность: как и
State,SliceиOptionalSliceявляются потокобезопасными и предназначены для работы с моделью параллелизма Swift.
Заключение
Slice и OptionalSlice предоставляют мощные способы доступа и изменения определенных частей вашего состояния потокобезопасным образом. Используя эти компоненты, вы можете упростить управление состоянием в более сложных приложениях, обеспечивая реактивность и актуальность вашего пользовательского интерфейса.
Этот перевод был сгенерирован автоматически и может содержать ошибки. Если вы носитель языка, мы будем признательны за ваши исправления через Pull Request.