Bu property wrapper'ların hepsi SwiftUI'ye ve söyler. Temel ayrım, (, ) ile (, , ) arasındadır; buna ek olarak nesnenin ömründen kimin sorumlu olduğu vardır.
@State@Binding@StateObject@ObservedObject@EnvironmentObject// Bu view'a AİT değer durumu
struct Toggle: View {
@State private var isOn = false // yerel doğruluk kaynağı
var body: some View {
Switch(isOn: $isOn) // $ bir Binding oluşturur
}
}
// BAŞKA YERE ait duruma iki yönlü bir referans
struct Switch: View {
@Binding var isOn: Bool // sahiplik yok; ebeveyni okur+yazar
var body: some View { Button("\(isOn)") { isOn.toggle() } }
}
final class CartModel: ObservableObject {
@Published var items: [Item] = [] // değişiklik => view'lar yeniden render edilir
}
struct CartScreen: View {
@StateObject private var model = CartModel() // SAHİP: bir kez oluşturulur, render'lardan sağ çıkar
var body: some View { CartList(model: model) }
}
struct CartList: View {
@ObservedObject var model: CartModel // gözlemler; bir ebeveyne aittir
var body: some View { Text("\(model.items.count)") }
}
| Wrapper | Tip | Sahiplik | Ne zaman kullanılır |
|---|---|---|---|
@State | değer | bu view | basit yerel durum |
@Binding | değer | bir ebeveyn | çocuk, ebeveynin durumunu düzenler |
@StateObject | referans | bu view (bir kez oluşturulur) | view modeli oluşturur |
@ObservedObject | referans | başka yer | model dışarıdan verilir |
@EnvironmentObject | referans | ata (ancestor) | ağacın derinlerinde paylaşılan |
@StateObject vs @ObservedObject, klasik tuzaktır. Bir modeli @ObservedObject var m = Model() ile oluşturmak, her yeniden render'da onu yeniden örnekler ve durumu sessizce kaybeder. View'ın nesneyi oluşturduğu her yerde @StateObject kullanın.@EnvironmentObject, hiçbir ata onu .environmentObject(...) ile enjekte etmemişse çalışma zamanında çöker.Yanlış wrapper seçmek, SwiftUI durum hatalarının bir numaralı kaynağıdır — titreşen değerler, kaydırmada sıfırlanmalar veya asla güncellenmeyen view'lar. Görüşmeciler bunu sorar çünkü @StateObject vs @ObservedObject cevabı, SwiftUI'nin sahiplik modelini anlayıp anlamadığınızı anında ortaya koyar.
Junior'dan Senior'a detaylı cevaplarla bir BT mülakat soruları kütüphanesi.
Bağış Yap