ਇਹ ਸਾਰੇ 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 pass ਕੀਤਾ ਗਿਆ |
@EnvironmentObject | reference | ancestor | tree ਵਿੱਚ ਡੂੰਘਾਈ ਤੱਕ shared |
@StateObject ਬਨਾਮ @ObservedObject classic trap ਹੈ। @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, ਜਾਂ ਉਹ views ਜੋ ਕਦੇ update ਨਹੀਂ ਹੁੰਦੀਆਂ। Interviewers ਇਹ ਇਸ ਲਈ ਪੁੱਛਦੇ ਹਨ ਕਿਉਂਕਿ @StateObject ਬਨਾਮ @ObservedObject ਦਾ ਜਵਾਬ ਤੁਰੰਤ ਦੱਸ ਦਿੰਦਾ ਹੈ ਕਿ ਤੁਸੀਂ SwiftUI ਦਾ ownership model ਸਮਝਦੇ ਹੋ ਜਾਂ ਨਹੀਂ।
ਵਿਸਤ੍ਰਿਤ ਜਵਾਬਾਂ ਨਾਲ IT ਇੰਟਰਵਿਊ ਸਵਾਲਾਂ ਦੀ ਇੱਕ ਲਾਇਬ੍ਰੇਰੀ — ਜੂਨੀਅਰ ਤੋਂ ਸੀਨੀਅਰ ਤੱਕ।
ਦਾਨ ਕਰੋ