Todos estos property wrappers le indican a SwiftUI y . La división clave es entre (, ) y (, , ), más quién es responsable del ciclo de vida del objeto.
@State@Binding@StateObject@ObservedObject@EnvironmentObject// Value state OWNED by this view
struct Toggle: View {
@State private var isOn = false // local source of truth
var body: some View {
Switch(isOn: $isOn) // $ makes a Binding
}
}
// A two-way reference to state owned ELSEWHERE
struct Switch: View {
@Binding var isOn: Bool // no ownership; reads+writes parent
var body: some View { Button("\(isOn)") { isOn.toggle() } }
}
final class CartModel: ObservableObject {
@Published var items: [Item] = [] // change => views re-render
}
struct CartScreen: View {
@StateObject private var model = CartModel() // OWNS: created once, survives re-renders
var body: some View { CartList(model: model) }
}
struct CartList: View {
@ObservedObject var model: CartModel // observes; owned by a parent
var body: some View { Text("\(model.items.count)") }
}
| Wrapper | Tipo | Propiedad | Úsalo cuando |
|---|---|---|---|
@State | valor | esta vista | estado local simple |
@Binding | valor | un padre | el hijo edita el estado del padre |
@StateObject | referencia | esta vista (creado una vez) | la vista crea el modelo |
@ObservedObject | referencia | en otro lugar | el modelo se pasa como parámetro |
@EnvironmentObject | referencia | un ancestro | compartido en lo profundo del árbol |
@StateObject frente a @ObservedObject es la trampa clásica. Crear un modelo con @ObservedObject var m = Model() lo reinstancia en cada re-render, perdiendo el estado silenciosamente. Usa @StateObject allí donde la vista cree el objeto.@EnvironmentObject provoca un crash en tiempo de ejecución si ningún ancestro lo inyectó mediante .environmentObject(...).Elegir el wrapper equivocado es la fuente número uno de bugs de estado en SwiftUI: valores que parpadean, reinicios al hacer scroll o vistas que nunca se actualizan. Los entrevistadores preguntan esto porque la respuesta sobre @StateObject frente a @ObservedObject revela al instante si entiendes el modelo de propiedad de SwiftUI.
Una biblioteca de preguntas de entrevista de IT con respuestas detalladas — de Junior a Senior.
Donar