Property wrappers hizi zote zinaiambia SwiftUI na . Mgawanyiko muhimu ni (, ) dhidi ya (, , ), pamoja na nani anawajibika kwa maisha ya object.
@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 | Type | Umiliki | Tumia wakati |
|---|---|---|---|
@State | value | view hii | state rahisi ya ndani |
@Binding | value | parent | mtoto anahariri state ya parent |
@StateObject | reference | view hii (imeundwa mara moja) | view inaunda model |
@ObservedObject | reference | mahali pengine | model imepitishwa ndani |
@EnvironmentObject | reference | babu (ancestor) | inayoshirikiwa kwa kina kwenye tree |
@StateObject dhidi ya @ObservedObject ni mtego wa kawaida. Kuunda model kwa @ObservedObject var m = Model() huiunda upya kila re-render, ukipoteza state kimya. Tumia @StateObject popote view inayounda object.@EnvironmentObject hu-crash wakati wa runtime iwapo hakuna ancestor aliyeiingiza kupitia .environmentObject(...).Kuchagua wrapper isiyo sahihi ni chanzo namba moja cha bugs za state za SwiftUI — thamani zinazomeremeta, ku-reset wakati wa scroll, au views ambazo hazisasishwi kamwe. Wahojaji huuliza hili kwa sababu jibu la @StateObject dhidi ya @ObservedObject linadhihirisha papo hapo kama unaelewa mfumo wa umiliki wa SwiftUI.
Maktaba ya maswali ya mahojiano ya IT yenye majibu ya kina — kutoka Junior hadi Senior.
Changia