Šie property wrapper visi nurodo SwiftUI, ir . Pagrindinis skirstymas yra (, ) prieš (, , ), plius kas atsakingas už objekto gyvavimo trukmę.
@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 | Tipas | Nuosavybė | Naudoti kai |
|---|---|---|---|
@State | reikšmė | šis view | paprasta lokali būsena |
@Binding | reikšmė | tėvinis | vaikas redaguoja tėvo būseną |
@StateObject | nuoroda | šis view (sukurta vieną kartą) | view kuria modelį |
@ObservedObject | nuoroda | kitur | modelis perduodamas iš išorės |
@EnvironmentObject | nuoroda | protėvis | dalijamasi giliai medyje |
@StateObject vs @ObservedObject yra klasikinis spąstas. Modelio kūrimas su @ObservedObject var m = Model() iš naujo jį sukuria prie kiekvieno perpiešimo, tyliai prarasdamas būseną. Naudokite @StateObject visur, kur view kuria objektą.@EnvironmentObject sukelia gedimą vykdymo metu, jei nė vienas protėvis jo neįterpė per .environmentObject(...).Neteisingo wrapper pasirinkimas yra pagrindinis SwiftUI būsenos klaidų šaltinis — mirgančios reikšmės, atstatymai slenkant arba view, kurie niekada neatsinaujina. Interviuotojai to klausia, nes atsakymas apie @StateObject vs @ObservedObject iškart atskleidžia, ar suprantate SwiftUI nuosavybės modelį.
IT pokalbių klausimų biblioteka su išsamiais atsakymais — nuo Junior iki Senior.
Paaukoti