हे सर्व 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 संपादित करते |
@StateObject | reference | हे view (एकदाच तयार) | view model तयार करते |
@ObservedObject | reference | इतरत्र | model passed in केले जाते |
@EnvironmentObject | reference | ancestor | tree मध्ये खोलवर shared |
@StateObject वि. @ObservedObject हा classic सापळा आहे. @ObservedObject var m = Model() ने model तयार केल्यास ते प्रत्येक re-render वर पुन्हा instantiate होते, आणि शांतपणे state गमावते. जिथे view object तयार करते तिथे @StateObject वापरा..environmentObject(...) द्वारे inject न केल्यास @EnvironmentObject runtime ला crash होते.चुकीचा wrapper निवडणे हा SwiftUI state bugs चा क्रमांक एकचा स्रोत आहे — flickering values, scroll वर resets, किंवा कधीही update न होणारी views. मुलाखतकार हे विचारतात कारण @StateObject वि. @ObservedObject चे उत्तर लगेच उघड करते की तुम्हाला SwiftUI चे ownership model समजते का.
सविस्तर उत्तरांसह IT मुलाखत प्रश्नांचे ग्रंथालय — Junior पासून Senior पर्यंत.
देणगी द्या