Middle
Mis on state, state object ja observed object iOS arenduses?
sobes.tech AI
Vastus AI-lt
State — SwiftUI omadusraamistik, mis võimaldab hallata kohaliku vaate olekut. Kui @State-ga ümbritsetud omaduse väärtus muutub, uuendatakse vaadet automaatselt.
StateObject — SwiftUI omadusraamistik, mis on mõeldud ObservableObject protokollile vastavate objektide loomise ja haldamise jaoks, mis on osa vaate elutsüklist. Tõhus nende objektide jaoks, mis on loodud sisemiselt vaates ja millega on seotud.
ObservedObject — SwiftUI omadusraamistik, mis võimaldab jälgida olemasolevate ObservableObject protokollile vastavate objektide linke, mis on edastatud väljast. SwiftUI jälgib nende objektide muudatusi ja uuendab vaadet.
Võrdlustabel:
| Raamistik | Otstarve | Omandamine | Näide kasutamisest |
|---|---|---|---|
@State |
Kohalik vaate olek | Vaade | Lihtne loendur, nähtavuslipik |
@StateObject |
ObservableObject loomine ja omandamine |
Vaade | Vaadete mudel (ViewModel), loodud vaates |
@ObservedObject |
Jälgib ObservableObject, mis on edastatud |
Välise allikana | Vaadete mudel (ViewModel), edastatud vanemvaatest |
Näide @State kasutamisest:
struct CounterView: View {
@State private var count: Int = 0 // Kohalik olek
var body: some View {
VStack {
Text("Loendus: \(count)")
Button("Suurenda") {
count += 1 // Oleku muutmine uuendab vaadet
}
}
}
}
Näide @StateObject ja @ObservedObject kasutamisest:
import SwiftUI
// ObservableObject andme mudel
class DataModel: ObservableObject {
@Published var value: String
init(value: String) {
self.value = value
}
}
struct ContentView: View {
// Loon ja oman DataModel eksemplari
@StateObject private var localData = DataModel(value: "Algne kohalik väärtus")
var body: some View {
VStack {
Text("Kohalikud andmed: \(localData.value)")
Button("Muuda kohalikke andmeid") {
localData.value = "Muudetud kohaliku väärtusega \(Int.random(in: 1...100))"
}
// Edastan localData lapsevaatele
ChildView(observedData: localData)
}
}
}
struct ChildView: View {
// Jälgib edastatud DataModel eksemplari
@ObservedObject var observedData: DataModel
var body: some View {
VStack {
Text("Jälgitavad andmed lapses: \(observedData.value)")
Button("Muuda jälgitavaid andmeid") {
observedData.value = "Muudetud lapse poolt \(Int.random(in: 1...100))"
}
}
}
}