Middle
iOS dasturlashda state, state object va observed object nima?
sobes.tech AI
AIdan javob
State — SwiftUI'da, görünümün yerli vəziyyətini idarə etməyə imkan verən property-Wrapper-dir. @State ilə örtülmüş property-in dəyəri dəyişdikdə, görünüm avtomatik olaraq yenilənir.
StateObject — SwiftUI'da, ObservableObject protokoluna uyğun obyektləri yaratmaq və idarə etmək üçün property-Wrapper-dir və görünümün həyat dövrünün bir hissəsidir. İçində yaradılan və onunla yaşayan obyektlər üçün effektivdir.
ObservedObject — SwiftUI'da, mövcud obyektlərə istinadları idarə etmək üçün property-Wrapper-dir və bu obyektlər kənardan ötürülmüşdür. SwiftUI bu obyektlərdəki dəyişiklikləri izləyir və görünümü yeniləyir.
Müqayisəli cədvəl:
| Wrapper | Məqsəd | Sahiblik | İstifadə nümunəsi |
|---|---|---|---|
@State |
Yerli görünüm vəziyyəti | Görünüm | Sadə sayğac, görünürlük bayrağı |
@StateObject |
ObservableObject yaratmaq və idarə etmək |
Görünüm | Görünüm daxilində yaradılan ViewModel modeli |
@ObservedObject |
Mövcud ObservableObject-ə nəzarət |
Xarici mənbə | Ata görünümündən ötürülən ViewModel modeli |
@State istifadə nümunəsi:
struct CounterView: View {
@State private var count: Int = 0 // Yerli vəziyyət
var body: some View {
VStack {
Text("Count: \(count)")
Button("Artır") {
count += 1 // Vəziyyətin dəyişməsi yeniləməni tetikler
}
}
}
}
@StateObject və @ObservedObject istifadə nümunəsi:
import SwiftUI
// Data modeli üçün ObservableObject
class DataModel: ObservableObject {
@Published var value: String
init(value: String) {
self.value = value
}
}
struct ContentView: View {
// DataModel nümunəsini yaradın və sahibi olun
@StateObject private var localData = DataModel(value: "İlkin Yerli Dəyər")
var body: some View {
VStack {
Text("Yerli Dəyərlər: \(localData.value)")
Button("Yerli Dəyərləri dəyiş") {
localData.value = "Dəyişdirilmiş Yerli Dəyər \(Int.random(in: 1...100))"
}
// localData-ı uşaq görünümünə ötürün
ChildView(observedData: localData)
}
}
}
struct ChildView: View {
// Ata tərəfindən ötürülən DataModel nümunəsini izləyin
@ObservedObject var observedData: DataModel
var body: some View {
VStack {
Text("Uşaqda müşahidə olunan məlumatlar: \(observedData.value)")
Button("Müşahidə olunan məlumatları dəyiş") {
observedData.value = "Uşaqdan dəyişdirildi \(Int.random(in: 1...100))"
}
}
}
}