Todos esses property wrappers dizem ao SwiftUI e . A divisão principal é entre (, ) e (, , ), além de quem é responsável pelo tempo de vida do objeto.
@State@Binding@StateObject@ObservedObject@EnvironmentObject// Estado de valor de PROPRIEDADE desta view
struct Toggle: View {
@State private var isOn = false // fonte da verdade local
var body: some View {
Switch(isOn: $isOn) // $ cria um Binding
}
}
// Uma referência bidirecional a um estado de propriedade de OUTRO LUGAR
struct Switch: View {
@Binding var isOn: Bool // sem posse; lê+escreve no pai
var body: some View { Button("\(isOn)") { isOn.toggle() } }
}
final class CartModel: ObservableObject {
@Published var items: [Item] = [] // mudança => views re-renderizam
}
struct CartScreen: View {
@StateObject private var model = CartModel() // POSSUI: criado uma vez, sobrevive a re-renders
var body: some View { CartList(model: model) }
}
struct CartList: View {
@ObservedObject var model: CartModel // observa; posse de um pai
var body: some View { Text("\(model.items.count)") }
}
| Wrapper | Tipo | Posse | Use quando |
|---|---|---|---|
@State | valor | esta view | estado local simples |
@Binding | valor | um pai | filho edita o estado do pai |
@StateObject | referência | esta view (criado uma vez) | a view cria o modelo |
@ObservedObject | referência | outro lugar | modelo passado por parâmetro |
@EnvironmentObject | referência | ancestral | compartilhado no fundo da árvore |
@StateObject vs @ObservedObject é a armadilha clássica. Criar um modelo com @ObservedObject var m = Model() o re-instancia a cada re-render, perdendo o estado silenciosamente. Use @StateObject sempre que a view cria o objeto.@EnvironmentObject causa crash em tempo de execução se nenhum ancestral o injetou via .environmentObject(...).Escolher o wrapper errado é a causa número um de bugs de estado no SwiftUI — valores piscando, resets ao rolar, ou views que nunca atualizam. Entrevistadores perguntam isso porque a resposta sobre @StateObject vs @ObservedObject revela instantaneamente se você entende o modelo de posse do SwiftUI.
Uma biblioteca de perguntas de entrevista de TI com respostas detalhadas — de Júnior a Sênior.
Doar