Middle+
Bağlantı semantiğini ilan eden property wrapper'ı adlandırın.
sobes.tech yapay zeka
AI'dan gelen yanıt
@State@Binding@EnvironmentObject@ObservedObject@StateObject
Bu property wrapper'lar geleneksel anlamda referans semantiği (C++'daki gösterici gibi) bildirmezler, ancak SwiftUI'da "referanslar" veya ortak mutable gerçeklik kaynakları olarak temsil edilen verilerle çalışmaya olanak tanır. Veri yaşam döngüsünü yönetirler ve değişikliklerinde otomatik UI güncellemesi sağlarlar.
Örneğin:
@State: Görünüm içinde yerel durumu yönetir.@Statedeğişkeni değiştiğinde görünüm yeniden çizilir.struct MyView: View { @State private var isActive = false var body: some View { Button("Toggle") { isActive.toggle() } } }@Binding:@Stateveya başka bir veri kaynağına çift yönlü bağlam oluşturmayı sağlar. Bir yerdeki değişiklik diğerine yansır.struct ParentView: View { @State private var value = 0 var body: some View { VStack { Text("Value: \(value)") ChildView(count: $value) // $ Binding oluşturur } } } struct ChildView: View { @Binding var count: Int // Binding alır var body: some View { Button("Increment") { count += 1 // Binding'i değiştirir } } }@ObservedObject:ObservableObjectprotokolünü uygulayan referans tipleri (sınıflar) için kullanılır.@Publishedile işaretlenmiş özelliklerdeki değişiklikler görünümün güncellenmesini tetikler.import Combine class Counter: ObservableObject { @Published var count = 0 } struct ContentView: View { @ObservedObject var counter = Counter() // Referans tipi var body: some View { VStack { Text("Count: \(counter.count)") Button("Increment") { counter.count += 1 } } } }@StateObject:@ObservedObject'e benzer, ancak birObservableObjectörneği oluşturmak ve yaşam döngüsünü yönetmek için tasarlanmıştır. Görünüm nesneye sahiptir.import Combine class TimerData: ObservableObject { @Published var timerSeconds = 0 init() { Timer.scheduledTimer(withTimeInterval: 1, repeats: true) { _ in self.timerSeconds += 1 } } } struct TimerView: View { @StateObject var timerData = TimerData() // Nesne oluşturma ve sahip olma var body: some View { Text("Time: \(timerData.timerSeconds)") } }@EnvironmentObject:ObservableObjectörneklerini View hiyerarşisinde iletmeye olanak tanır, her View'un yapıcıları aracılığıyla iletmeye gerek kalmadan.import Combine class UserSettings: ObservableObject { @Published var loggedIn = false } struct AppView: View { @StateObject var settings = UserSettings() var body: some View { ContentView() .environmentObject(settings) // Ortamda enjekte et } } struct ContentView: View { @EnvironmentObject var settings: UserSettings // Ortamdan erişim var body: some View { Toggle("Logged In", isOn: $settings.loggedIn) } }