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