ये सभी property wrappers 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 पास किया गया |
@EnvironmentObject | reference | ancestor | tree में गहराई तक share किया गया |
@StateObject बनाम @ObservedObject क्लासिक जाल है। @ObservedObject var m = Model() के साथ model बनाने से यह हर re-render पर फिर से instantiate हो जाता है, जिससे state चुपचाप खो जाता है। जहाँ भी view object को बनाता है, वहाँ @StateObject का उपयोग करें।@EnvironmentObject runtime पर crash कर जाता है यदि किसी ancestor ने इसे .environmentObject(...) के माध्यम से inject नहीं किया हो।गलत wrapper चुनना SwiftUI state bugs का नंबर-एक स्रोत है — flickering values, scroll पर reset, या ऐसे views जो कभी update नहीं होते। Interviewers यह इसलिए पूछते हैं क्योंकि @StateObject बनाम @ObservedObject का जवाब तुरंत बता देता है कि आप SwiftUI के ownership model को समझते हैं या नहीं।
विस्तृत उत्तरों के साथ IT इंटरव्यू प्रश्नों की एक लाइब्रेरी — जूनियर से सीनियर तक।
दान करें