Aceste property wrappers îi spun toate lui SwiftUI și . Diviziunea cheie este între (, ) și (, , ), plus cine este responsabil pentru durata de viață a obiectului.
@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 | Tip | Proprietate | Folosește când |
|---|---|---|---|
@State | valoare | acest view | stare locală simplă |
@Binding | valoare | un părinte | copilul editează starea părintelui |
@StateObject | referință | acest view (creat o dată) | view-ul creează modelul |
@ObservedObject | referință | în altă parte | modelul este pasat înăuntru |
@EnvironmentObject | referință | un strămoș | partajat adânc în arbore |
@StateObject vs. @ObservedObject este capcana clasică. Crearea unui model cu @ObservedObject var m = Model() îl re-instanțiază la fiecare re-randare, pierzând silențios starea. Folosește @StateObject oriunde view-ul creează obiectul.@EnvironmentObject provoacă crash la runtime dacă niciun strămoș nu l-a injectat prin .environmentObject(...).Alegerea greșită a wrapper-ului este sursa numărul unu de bug-uri de stare în SwiftUI — valori care pâlpâie, resetări la scroll sau view-uri care nu se actualizează niciodată. Intervievatorii întreabă asta pentru că răspunsul despre @StateObject vs. @ObservedObject dezvăluie instant dacă înțelegi modelul de proprietate (ownership) din SwiftUI.
O bibliotecă de întrebări de interviu IT cu răspunsuri detaliate — de la Junior la Senior.
Donează