Descripción General del Uso
June 11, 2026 · View on GitHub
Esta descripción general proporciona una introducción rápida al uso de los componentes clave de la biblioteca AppState dentro de una View de SwiftUI. Cada sección incluye ejemplos simples que se ajustan al alcance de una estructura de vista de SwiftUI.
Definición de Valores en la Extensión de Application
Para definir el estado o las dependencias de toda la aplicación, debe extender el objeto Application. Esto le permite centralizar todo el estado de su aplicación en un solo lugar. A continuación, se muestra un ejemplo de cómo extender Application para crear varios estados y dependencias:
import AppState
extension Application {
var user: State<User> {
state(initial: User(name: "Guest", isLoggedIn: false))
}
var userPreferences: StoredState<String> {
storedState(initial: "Default Preferences", id: "userPreferences")
}
var darkModeEnabled: SyncState<Bool> {
syncState(initial: false, id: "darkModeEnabled")
}
var userToken: SecureState {
secureState(id: "userToken")
}
@MainActor
var largeDataset: FileState<[String]> {
fileState(initial: [], filename: "largeDataset")
}
}
State
State le permite definir un estado de toda la aplicación al que se puede acceder y modificar en cualquier parte de su aplicación.
Ejemplo
import AppState
import SwiftUI
struct ContentView: View {
@AppState(\.user) var user: User
var body: some View {
VStack {
Text("Hello, \(user.name)!")
Button("Log in") {
user.isLoggedIn.toggle()
}
}
}
}
StoredState
StoredState persiste el estado usando UserDefaults para garantizar que los valores se guarden entre lanzamientos de la aplicación.
Ejemplo
import AppState
import SwiftUI
struct PreferencesView: View {
@StoredState(\.userPreferences) var userPreferences: String
var body: some View {
VStack {
Text("Preferences: \(userPreferences)")
Button("Update Preferences") {
userPreferences = "Updated Preferences"
}
}
}
}
SyncState
SyncState sincroniza el estado de la aplicación en múltiples dispositivos usando iCloud.
Ejemplo
import AppState
import SwiftUI
struct SyncSettingsView: View {
@SyncState(\.darkModeEnabled) var isDarkModeEnabled: Bool
var body: some View {
VStack {
Toggle("Dark Mode", isOn: $isDarkModeEnabled)
}
}
}
FileState
FileState se utiliza para almacenar datos más grandes o complejos de forma persistente utilizando el sistema de archivos, lo que lo hace ideal para almacenar en caché o guardar datos que no se ajustan a las limitaciones de UserDefaults.
Ejemplo
import AppState
import SwiftUI
struct LargeDataView: View {
@FileState(\.largeDataset) var largeDataset: [String]
var body: some View {
List(largeDataset, id: \.self) { item in
Text(item)
}
}
}
ModelState
🍎 ModelState gestiona objetos @Model de SwiftData a través de AppState inyectando un ModelContainer compartido. Está destinado a view models, servicios y otro código que no es de vista; para vistas reactivas, use el @Query de SwiftData junto con el ModelContainer proporcionado por AppState. Las características de SwiftData requieren iOS 17+ / macOS 14+.
Ejemplo
import AppState
import SwiftData
private func makeItemContainer() -> ModelContainer {
do {
return try ModelContainer(for: Item.self)
} catch {
fatalError("Failed to create ModelContainer: \(error)")
}
}
extension Application {
var modelContainer: Dependency<ModelContainer> {
modelContainer(makeItemContainer())
}
var items: ModelState<Item> {
modelState(container: \.modelContainer)
}
}
@MainActor
final class ItemsViewModel: ObservableObject {
@ModelState(\.items) var items: [Item]
func add(_ item: Item) {
$items.insert(item)
}
}
Para más detalles, consulte la Guía de Uso de ModelState.
SecureState
SecureState almacena datos confidenciales de forma segura en el Llavero.
Ejemplo
import AppState
import SwiftUI
struct SecureView: View {
@SecureState(\.userToken) var userToken: String?
var body: some View {
VStack {
if let token = userToken {
Text("User token: \(token)")
} else {
Text("No token found.")
}
Button("Set Token") {
userToken = "secure_token_value"
}
}
}
}
Constant
Constant proporciona acceso inmutable y de solo lectura a los valores dentro del estado de su aplicación, garantizando la seguridad al acceder a valores que no deben modificarse.
Ejemplo
import AppState
import SwiftUI
struct ExampleView: View {
@Constant(\.user, \.name) var name: String
var body: some View {
Text("Username: \(name)")
}
}
Slicing State
Slice y OptionalSlice le permiten acceder a partes específicas del estado de su aplicación.
Ejemplo
import AppState
import SwiftUI
struct SlicingView: View {
@Slice(\.user, \.name) var name: String
var body: some View {
VStack {
Text("Username: \(name)")
Button("Update Username") {
name = "NewUsername"
}
}
}
}
Mejores Prácticas
- Use
AppStateen Vistas de SwiftUI: Los property wrappers como@AppState,@StoredState,@FileState,@SecureState, y otros están diseñados para ser utilizados dentro del alcance de las vistas de SwiftUI. - Defina el Estado en la Extensión de Application: Centralice la gestión del estado extendiendo
Applicationpara definir el estado y las dependencias de su aplicación. - Actualizaciones Reactivas: SwiftUI actualiza automáticamente las vistas cuando cambia el estado, por lo que no necesita actualizar manualmente la interfaz de usuario.
- Guía de Mejores Prácticas: Para un desglose detallado de las mejores prácticas al usar AppState.
Próximos Pasos
Después de familiarizarse con el uso básico, puede explorar temas más avanzados:
- Explore el uso de FileState para persistir grandes cantidades de datos en archivos en la Guía de Uso de FileState.
- 🍎 Aprenda a gestionar modelos de SwiftData a través de AppState en la Guía de Uso de ModelState.
- Aprenda sobre Constantes y cómo usarlas para valores inmutables en el estado de su aplicación en la Guía de Uso de Constantes.
- Investigue cómo se usa Dependency en AppState para manejar servicios compartidos y vea ejemplos en la Guía de Uso de Dependencia de Estado.
- Profundice en técnicas avanzadas de SwiftUI como el uso de
ObservedDependencypara gestionar dependencias observables en las vistas en la Guía de Uso de ObservedDependency. - Para técnicas de uso más avanzadas, como la creación Just-In-Time y la precarga de dependencias, consulte la Guía de Uso Avanzado.
Esta traducción fue generada automáticamente y puede contener errores. Si eres un hablante nativo, te agradecemos que contribuyas con correcciones a través de un Pull Request.