ఈ property wrapper లన్నీ SwiftUI కు మరియు అని చెబుతాయి. ముఖ్యమైన విభజన (, ) కు (, , ) కు మధ్య, అలాగే object యొక్క lifetime కు ఎవరు బాధ్యులు అనేది.
@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 | Ownership | ఎప్పుడు వాడాలి |
|---|---|---|---|
@State | value | ఈ view | సాధారణ local state |
@Binding | value | ఒక parent | child parent యొక్క state ను edit చేస్తుంది |
@StateObject | reference | ఈ view (ఒకసారి సృష్టించబడింది) | view model ను సృష్టిస్తుంది |
@ObservedObject | reference | మరెక్కడో | model pass చేయబడింది |
@EnvironmentObject | reference | ancestor | tree లో లోతుగా share చేయబడింది |
@StateObject vs @ObservedObject అనేది classic trap. @ObservedObject var m = Model() తో model ను సృష్టించడం ప్రతి re-render లో దాన్ని re-instantiate చేస్తుంది, నిశ్శబ్దంగా state ను కోల్పోతుంది. view object ను సృష్టించే ప్రతిచోటా @StateObject వాడండి..environmentObject(...) ద్వారా inject చేయకపోతే @EnvironmentObject runtime లో crash అవుతుంది.తప్పు wrapper ఎంచుకోవడం SwiftUI state bug లకు నంబర్-వన్ మూలం — flickering విలువలు, scroll లో reset లు, లేదా ఎప్పటికీ update కాని view లు. @StateObject vs @ObservedObject సమాధానం మీరు SwiftUI యొక్క ownership model ను అర్థం చేసుకున్నారో లేదో వెంటనే వెల్లడిస్తుంది కాబట్టి interviewer లు దీన్ని అడుగుతారు.
జూనియర్ నుండి సీనియర్ వరకు వివరణాత్మక సమాధానాలతో IT ఇంటర్వ్యూ ప్రశ్నల లైబ్రరీ.
విరాళం