Këta property wrapper-a i tregojnë të gjithë SwiftUI-t dhe . Ndarja kryesore është (, ) kundrejt (, , ), plus kush është përgjegjës për jetëgjatësinë e objektit.
@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 | Tipi | Zotërimi | Përdoreni kur |
|---|---|---|---|
@State | value | ky view | gjendje lokale e thjeshtë |
@Binding | value | një prind | fëmija editon gjendjen e prindit |
@StateObject | reference | ky view (krijuar një herë) | view-ja krijon modelin |
@ObservedObject | reference | diku tjetër | modeli kalohet nga jashtë |
@EnvironmentObject | reference | një paraardhës | i përbashkët thellë në pemë |
@StateObject kundrejt @ObservedObject është kurthi klasik. Krijimi i një modeli me @ObservedObject var m = Model() e ri-instancion atë çdo ri-render, duke humbur gjendjen në heshtje. Përdorni @StateObject kudo që view-ja krijon objektin.@EnvironmentObject bën crash gjatë runtime nëse asnjë paraardhës nuk e ka injektuar përmes .environmentObject(...).Zgjedhja e wrapper-it të gabuar është burimi numër një i bug-eve të gjendjes në SwiftUI — vlera që dridhen, reset-e gjatë scroll-it, ose view-t që nuk përditësohen kurrë. Intervistuesit e pyesin këtë sepse përgjigja @StateObject kundrejt @ObservedObject zbulon menjëherë nëse e kuptoni modelin e zotërimit të SwiftUI-t.
Një bibliotekë pyetjesh intervistash IT me përgjigje të detajuara — nga Junior te Senior.
Dhuro