Deze property wrappers vertellen SwiftUI allemaal en . De belangrijkste scheiding is (, ) versus (, , ), plus wie verantwoordelijk is voor de levensduur van het object.
@State@Binding@StateObject@ObservedObject@EnvironmentObject// Value-state EIGENDOM van deze view
struct Toggle: View {
@State private var isOn = false // lokale bron van waarheid
var body: some View {
Switch(isOn: $isOn) // $ maakt een Binding
}
}
// Een tweerichtingsreferentie naar state die ERGENS ANDERS eigendom is
struct Switch: View {
@Binding var isOn: Bool // geen eigendom; leest+schrijft parent
var body: some View { Button("\(isOn)") { isOn.toggle() } }
}
final class CartModel: ObservableObject {
@Published var items: [Item] = [] // wijziging => views renderen opnieuw
}
struct CartScreen: View {
@StateObject private var model = CartModel() // BEZIT: één keer gemaakt, overleeft re-renders
var body: some View { CartList(model: model) }
}
struct CartList: View {
@ObservedObject var model: CartModel // observeert; eigendom van een parent
var body: some View { Text("\(model.items.count)") }
}
| Wrapper | Type | Eigendom | Gebruik wanneer |
|---|---|---|---|
@State | value | deze view | eenvoudige lokale state |
@Binding | value | een parent | child bewerkt state van de parent |
@StateObject | reference | deze view (één keer gemaakt) | view maakt het model |
@ObservedObject | reference | elders | model wordt doorgegeven |
@EnvironmentObject | reference | voorouder | diep in de tree gedeeld |
@StateObject versus @ObservedObject is de klassieke valstrik. Een model maken met @ObservedObject var m = Model() instantieert het opnieuw bij elke re-render, waardoor state stilletjes verloren gaat. Gebruik @StateObject overal waar de view het object maakt.@EnvironmentObject crasht tijdens runtime als geen voorouder het via .environmentObject(...) heeft geïnjecteerd.De verkeerde wrapper kiezen is de nummer-één bron van SwiftUI-state-bugs — flikkerende waarden, resets bij scrollen, of views die nooit updaten. Interviewers stellen deze vraag omdat het antwoord op @StateObject versus @ObservedObject onmiddellijk onthult of je het eigendomsmodel van SwiftUI begrijpt.
Een bibliotheek met IT-sollicitatievragen met gedetailleerde antwoorden — van Junior tot Senior.
Doneren