Svi ovi property wrapperi govore SwiftUI-ju i . Ključna podjela je (, ) nasuprot (, , ), plus tko je odgovoran za životni vijek objekta.
@State@Binding@StateObject@ObservedObject@EnvironmentObject// Vrijednosno stanje koje POSJEDUJE ovaj pogled
struct Toggle: View {
@State private var isOn = false // lokalni izvor istine
var body: some View {
Switch(isOn: $isOn) // $ stvara Binding
}
}
// Dvosmjerna referenca na stanje koje se posjeduje DRUGDJE
struct Switch: View {
@Binding var isOn: Bool // bez vlasništva; čita+piše roditelja
var body: some View { Button("\(isOn)") { isOn.toggle() } }
}
final class CartModel: ObservableObject {
@Published var items: [Item] = [] // promjena => pogledi se ponovno renderiraju
}
struct CartScreen: View {
@StateObject private var model = CartModel() // POSJEDUJE: stvoreno jednom, preživljava ponovne rendere
var body: some View { CartList(model: model) }
}
struct CartList: View {
@ObservedObject var model: CartModel // promatra; posjeduje ga roditelj
var body: some View { Text("\(model.items.count)") }
}
| Wrapper | Tip | Vlasništvo | Koristi kad |
|---|---|---|---|
@State | vrijednost | ovaj pogled | jednostavno lokalno stanje |
@Binding | vrijednost | roditelj | dijete uređuje roditeljevo stanje |
@StateObject | referenca | ovaj pogled (stvoreno jednom) | pogled stvara model |
@ObservedObject | referenca | drugdje | model se prosljeđuje |
@EnvironmentObject | referenca | predak | dijeljeno duboko u stablu |
@StateObject vs @ObservedObject je klasična zamka. Stvaranje modela s @ObservedObject var m = Model() ponovno ga instancira pri svakom renderu, tiho gubeći stanje. Koristite @StateObject gdje god pogled stvara objekt.@EnvironmentObject se ruši u vrijeme izvođenja ako ga nijedan predak nije ubrizgao preko .environmentObject(...).Odabir pogrešnog wrappera glavni je izvor bugova u SwiftUI stanju — treperave vrijednosti, resetiranja pri skrolanju ili pogledi koji se nikad ne ažuriraju. Ispitivači ovo pitaju jer odgovor o @StateObject vs @ObservedObject odmah otkriva razumijete li SwiftUI-jev model vlasništva.
Knjižnica IT pitanja za razgovore za posao s detaljnim odgovorima — od Juniora do Seniora.
Doniraj