Middle+
İstinadın semantikası elan edən property wrapper-ı adlandırın.
sobes.tech Süni İntellekt
AI-dan cavab
@State@Binding@EnvironmentObject@ObservedObject@StateObject
Bu property wrapper'lar ənənəvi anlamda (C++-də göstərici kimi) referans semantikası elan etmir, lakin SwiftUI-də "referanslar" və ya ümumi mutable həqiqət mənbələri kimi təqdim olunan məlumatlarla işləməyə imkan verir. Onlar məlumatların həyat dövrünü idarə edir və dəyişiklikləri zamanı UI-nin avtomatik yenilənməsini təmin edir.
Məsələn:
@State: View daxilində lokal vəziyyəti idarə edir.@Statedəyişəninin dəyişməsi View-in yenidən çəkilməsinə səbəb olur.struct MyView: View { @State private var isActive = false var body: some View { Button("Toggle") { isActive.toggle() } } }@Binding:@Statevə ya digər məlumat mənbəyinə iki tərəfli bağlama yaratmağa imkan verir. Dəyişikliklər bir yerdə digərinə əks olunur.struct ParentView: View { @State private var value = 0 var body: some View { VStack { Text("Value: \(value)") ChildView(count: $value) // $ bağlama yaradır } } } struct ChildView: View { @Binding var count: Int // Bağlamanı alır var body: some View { Button("Increment") { count += 1 // Bağlamanı dəyişir } } }@ObservedObject:ObservableObjectprotokolunu həyata keçirən referans tipləri üçün istifadə olunur. Bu obyektin@Publishedilə işarələnmiş xüsusiyyətlərində dəyişikliklər View-in yenilənməsinə səbəb olur.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-ə bənzəyir, lakinObservableObjectnümunəsini View daxilində yaratmaq və onun həyat dövrünü idarə etmək üçün nəzərdə tutulub. View obyektin sahibi olur.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() // Yaratma və sahibi olma var body: some View { Text("Time: \(timerData.timerSeconds)") } }@EnvironmentObject:ObservableObjectnümunələrini View-lərin hiyerarşisində keçirməyə imkan verir, onları hər View-un konstruktoru vasitəsilə ötürmədən.import Combine class UserSettings: ObservableObject { @Published var loggedIn = false } struct AppView: View { @StateObject var settings = UserSettings() var body: some View { ContentView() .environmentObject(settings) // Ətraf mühitə daxil edilir } } struct ContentView: View { @EnvironmentObject var settings: UserSettings // Ətraf mühitdən əldə edilir var body: some View { Toggle("Logged In", isOn: $settings.loggedIn) } }