Disse property wrapperne forteller alle SwiftUI og . Hovedskillet er (, ) kontra (, , ), pluss hvem som er ansvarlig for objektets levetid.
@State@Binding@StateObject@ObservedObject@EnvironmentObject// Verditilstand EID av dette viewet
struct Toggle: View {
@State private var isOn = false // lokal kilde til sannhet
var body: some View {
Switch(isOn: $isOn) // $ lager en Binding
}
}
// En toveis referanse til tilstand eid ANDRE STEDER
struct Switch: View {
@Binding var isOn: Bool // ingen eierskap; leser+skriver forelder
var body: some View { Button("\(isOn)") { isOn.toggle() } }
}
final class CartModel: ObservableObject {
@Published var items: [Item] = [] // endring => views rendres på nytt
}
struct CartScreen: View {
@StateObject private var model = CartModel() // EIER: opprettet én gang, overlever re-render
var body: some View { CartList(model: model) }
}
struct CartList: View {
@ObservedObject var model: CartModel // observerer; eid av en forelder
var body: some View { Text("\(model.items.count)") }
}
| Wrapper | Type | Eierskap | Bruk når |
|---|---|---|---|
@State | verdi | dette viewet | enkel lokal tilstand |
@Binding | verdi | en forelder | barn redigerer forelderens tilstand |
@StateObject | referanse | dette viewet (opprettet én gang) | viewet oppretter modellen |
@ObservedObject | referanse | andre steder | modell sendt inn |
@EnvironmentObject | referanse | forfar | delt dypt i treet |
@StateObject kontra @ObservedObject er den klassiske fellen. Å opprette en modell med @ObservedObject var m = Model() reinstansierer den ved hver re-render, og mister tilstand stille. Bruk @StateObject overalt hvor viewet oppretter objektet.@EnvironmentObject krasjer under kjøring hvis ingen forfar injiserte den via .environmentObject(...).Å velge feil wrapper er kilde nummer én til SwiftUI-tilstandsfeil — flimrende verdier, nullstillinger ved scrolling, eller views som aldri oppdateres. Intervjuere spør om dette fordi svaret på @StateObject kontra @ObservedObject avslører umiddelbart om du forstår SwiftUIs eierskapsmodell.
Et bibliotek av IT-intervjuspørsmål med detaljerte svar — fra Junior til Senior.
Doner