Middle
iOS inkişafında state, state object və observed object nədir?
sobes.tech Süni İntellekt
AI-dan cavab
State — SwiftUI-də görünüşü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üş avtomatik yenilənir.
StateObject — SwiftUI-də ObservableObject protokoluna uyğun obyektləri yaratmaq və idarə etmək üçün property wrapper-dir və görünüşün həyat dövrünün bir hissəsidir. İçində yaradılan və onunla yaşayan obyektlər üçün effektivdir.
ObservedObject — SwiftUI-də 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üşü 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("Zənginləşdir") {
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))"
}
}
}
}