Nämä property wrapperit kertovat kaikki SwiftUI:lle, ja . Keskeinen jako on (, ) vastaan (, , ), sekä se, kuka vastaa olion elinkaaresta.
@State@Binding@StateObject@ObservedObject@EnvironmentObject// Arvotila, jonka TÄMÄ näkymä OMISTAA
struct Toggle: View {
@State private var isOn = false // paikallinen totuuden lähde
var body: some View {
Switch(isOn: $isOn) // $ luo Bindingin
}
}
// Kaksisuuntainen viittaus MUUALLA omistettuun tilaan
struct Switch: View {
@Binding var isOn: Bool // ei omistusta; lukee+kirjoittaa vanhempaa
var body: some View { Button("\(isOn)") { isOn.toggle() } }
}
final class CartModel: ObservableObject {
@Published var items: [Item] = [] // muutos => näkymät renderöityvät uudelleen
}
struct CartScreen: View {
@StateObject private var model = CartModel() // OMISTAA: luodaan kerran, säilyy uudelleenrenderöinneissä
var body: some View { CartList(model: model) }
}
struct CartList: View {
@ObservedObject var model: CartModel // tarkkailee; vanhempi omistaa
var body: some View { Text("\(model.items.count)") }
}
| Wrapper | Tyyppi | Omistus | Käytä kun |
|---|---|---|---|
@State | arvo | tämä näkymä | yksinkertainen paikallinen tila |
@Binding | arvo | vanhempi | lapsi muokkaa vanhemman tilaa |
@StateObject | viittaus | tämä näkymä (luodaan kerran) | näkymä luo mallin |
@ObservedObject | viittaus | muualla | malli välitetään sisään |
@EnvironmentObject | viittaus | esivanhempi | jaettu syvällä puussa |
@StateObject vs. @ObservedObject on klassinen ansa. Mallin luominen @ObservedObject var m = Model()-muodolla luo sen uudelleen jokaisella uudelleenrenderöinnillä, menettäen hiljaa tilan. Käytä @StateObject-wrapperia aina, kun näkymä luo olion.@EnvironmentObject kaatuu suoritusaikana, jos mikään esivanhempi ei injektoinut sitä .environmentObject(...)in kautta.Väärän wrapperin valitseminen on SwiftUI:n tilabugien ykköslähde — välkkyvät arvot, nollautumiset vieritettäessä tai näkymät, jotka eivät koskaan päivity. Haastattelijat kysyvät tätä, koska @StateObject vs. @ObservedObject -vastaus paljastaa välittömästi, ymmärrätkö SwiftUI:n omistusmallin.
Kirjasto IT-haastattelukysymyksiä yksityiskohtaisine vastauksineen — Juniorista Senioriin.
Lahjoita