Semua property wrapper ini memberi tahu SwiftUI dan . Pembagian kuncinya adalah (, ) versus (, , ), ditambah siapa yang bertanggung jawab atas lifetime objek.
@State@Binding@StateObject@ObservedObject@EnvironmentObject// State value yang DIMILIKI oleh view ini
struct Toggle: View {
@State private var isOn = false // source of truth lokal
var body: some View {
Switch(isOn: $isOn) // $ membuat sebuah Binding
}
}
// Reference dua arah ke state yang dimiliki DI TEMPAT LAIN
struct Switch: View {
@Binding var isOn: Bool // tanpa kepemilikan; membaca+menulis parent
var body: some View { Button("\(isOn)") { isOn.toggle() } }
}
final class CartModel: ObservableObject {
@Published var items: [Item] = [] // perubahan => view merender ulang
}
struct CartScreen: View {
@StateObject private var model = CartModel() // MEMILIKI: dibuat sekali, bertahan lintas render
var body: some View { CartList(model: model) }
}
struct CartList: View {
@ObservedObject var model: CartModel // mengobservasi; dimiliki oleh parent
var body: some View { Text("\(model.items.count)") }
}
| Wrapper | Tipe | Kepemilikan | Gunakan ketika |
|---|---|---|---|
@State | value | view ini | state lokal sederhana |
@Binding | value | sebuah parent | child mengedit state parent |
@StateObject | reference | view ini (dibuat sekali) | view membuat model |
@ObservedObject | reference | di tempat lain | model dioper masuk |
@EnvironmentObject | reference | ancestor | dibagikan jauh di dalam tree |
@StateObject vs @ObservedObject adalah jebakan klasik. Membuat sebuah model dengan @ObservedObject var m = Model() menginstansiasinya ulang pada setiap render, secara diam-diam kehilangan state. Gunakan @StateObject di mana pun view tersebut membuat objeknya.@EnvironmentObject crash saat runtime jika tidak ada ancestor yang menginjeksikannya via .environmentObject(...).Memilih wrapper yang salah adalah sumber nomor satu bug state SwiftUI — nilai yang berkedip, reset saat scroll, atau view yang tidak pernah update. Pewawancara menanyakan ini karena jawaban @StateObject vs @ObservedObject langsung menunjukkan apakah kamu memahami ownership model SwiftUI.
Perpustakaan pertanyaan wawancara IT dengan jawaban mendetail — dari Junior hingga Senior.
Donasi