Fundamentos de SwiftUI y desarrollo de Interfaces
Desarrolla Apps IncreÃbles: primeros pasos con SwiftUI
Creación de views y uso de preview
Personalización de views con modifiers y uso de shapes
Image render
Composición de Layouts con Stacks
ScrollView y carousel
List y ForEach
Estructurando nuestra app
Quiz: Fundamentos de SwiftUI y desarrollo de Interfaces
Interacción del Usuario y Componentes de Entrada
Button y manejo de estado con @State
Text Field y Text Editor
Picker y DatePicker
Toggle y Slider
Formularios
Alertas y Modales
Gestures
Animaciones y uso del ProgressView
Quiz: Interacción del Usuario y Componentes de Entrada
Manejo del Estado y Arquitectura con ViewModels
ViewModels y @ObservedObject
Compartir Datos con @EnvironmentObject
Creación de Componentes Reutilizables con @Binding
Quiz: Manejo del Estado y Arquitectura con ViewModels
Navegación Avanzada
Navegación con NavigationStack
Personalización de la Barra de Navegación
Quiz: Navegación Avanzada
Lanzamiento de la app
Funcionalidades extra
Lanzamiento en simulador
No tienes acceso a esta clase
¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera
Un View Model nos ayuda a separar la lógica de negocios de la vista. Esto resultará en un código más fácil de manejar y organizado. Empezaremos creando una estructura adecuada para nuestra aplicación.
Primero que nada, debemos organizar nuestro proyecto adecuadamente. Sigamos los pasos:
views
llamada NCreateNote
.NCreateNoteView
a esta nueva carpeta.NCreateNoteViewModel
.Con esta estructura, garantizamos que cada componente de nuestra aplicación tenga su propio espacio y responsabilidad, lo cual simplifica el mantenimiento del proyecto.
El siguiente paso es crear y configurar nuestro View Model:
Definición de la clase: añadimos una clase llamada NCreateViewModel
que será de tipo ObservableObject
.
class NCreateViewModel: ObservableObject {
@Published var title: String = ""
@Published var text: String = ""
@Published var size: String = "Pequeño"
@Published var isFavorite: Bool = false
}
Uso de @Published
: Cambiamos nuestros estados a variables @Published
para que la vista observe automáticamente cualquier cambio en ellas.
Función createNote
: Creamos una función que generará la nota a partir de estos valores.
func createNote() -> NCard {
return NCard(title: title, text: text, size: size, isFavorite: isFavorite)
}
Esta práctica nos ayuda a mantener todas nuestras variables y lógica de creación de una nota en un solo lugar, alejadas de la vista.
Ahora integremos el View Model con la vista existente:
Sustituye los estados locales: reemplaza los estados locales en nCreateNoteView
por la instancia del View Model.
@StateObject private var viewModel = NCreateViewModel()
Actualizar referencias: asegúrate de que en toda la vista, las referencias sean a través del viewModel
.
var body: some View {
TextField("TÃtulo", text: $viewModel.title)
// Continúa con las otras propiedades...
}
Utilizar función desde el View Model: cambia la creación del card para que lo haga mediante viewModel.createNote()
.
Con estos cambios, el código del formulario se ve más limpio y mantiene una clara separación entre la lógica de negocio y la interfaz de usuario.
@StateObject
?Finalmente, es importante entender por qué se utiliza @StateObject
y no @State
. Cuando se observa un conjunto de datos o un modelo más complejo, se necesita @StateObject
. Esto es crucial para administrar la vida útil del objeto y garantizar que la vista tenga acceso a datos reactivos y bien manejados a medida que cambian.
Aprovechando este proceso de refactorización, incorporamos mejoras como isFavorite
al modelo NCard
, permitiendo mayor flexibilidad y capacidad para futuras actualizaciones.
Al probar el formulario, deberÃas ver que, al guardar una nota, el print
en la consola mostrará los elementos del NCard
correctamente reflejados con atributos como isFavorite
. Esta refactorización refuerza un enfoque modular y mantenible, esencial para el desarrollo profesional en Swift.
¡Continúa aprendiendo y aplicando buenas prácticas en tus futuros desarrollos!
Aportes 0
Preguntas 0
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?