Middle
Kas ir state, state object un observed object iOS izstrādē?
sobes.tech AI
Atbilde no AI
State — SwiftUI īpašības ietvars, kas ļauj pārvaldīt vietējo skata stāvokli. Mainot @State ietverto īpašību vērtību, skats automātiski tiek atjaunināts.
StateObject — SwiftUI īpašības ietvars, kas paredzēts ObservableObject protokolam atbilstošu objektu izveidei un pārvaldībai, kas ir daļa no skata dzīves cikla. Efektīvi tiem objektiem, kas ir izveidoti iekšpusē skata un ar to saistīti.
ObservedObject — SwiftUI īpašības ietvars, kas paredzēts, lai pārvaldītu saites uz esošiem ObservableObject protokolam atbilstošiem objektiem, kas ir nodoti no ārpuses. SwiftUI seko šo objektu izmaiņām un atjaunina skatu.
Salīdzinošā tabula:
| Ietvars | Mērķis | Piederība | Piemērs lietošanai |
|---|---|---|---|
@State |
Vietējais skata stāvoklis | Skats | Vienkāršs skaitītājs, redzamības karodziņš |
@StateObject |
ObservableObject izveide un piederība |
Skats | Skata modeļa (ViewModel) izveide skata iekšpusē |
@ObservedObject |
Uzraudzība ObservableObject, kas nodots |
Ārējais avots | Skata modeļa (ViewModel), kas nodots no vecāka skata |
Piemērs @State lietošanai:
struct CounterView: View {
@State private var count: Int = 0 // Vietējais stāvoklis
var body: some View {
VStack {
Text("Skaits: \(count)")
Button("Palielināt") {
count += 1 // Stāvokļa izmaiņas automātiski atjauno skatu
}
}
}
}
Piemērs @StateObject un @ObservedObject lietošanai:
import SwiftUI
// ObservableObject datu modelis
class DataModel: ObservableObject {
@Published var value: String
init(value: String) {
self.value = value
}
}
struct ContentView: View {
// Izveido un pieder DataModel instancei
@StateObject private var localData = DataModel(value: "Sākotnējā vietējā vērtība")
var body: some View {
VStack {
Text("Vietējie dati: \(localData.value)")
Button("Mainīt vietējos datus") {
localData.value = "Mainīti vietējie dati \(Int.random(in: 1...100))"
}
// Nodod localData bērna skata iekšpusē
ChildView(observedData: localData)
}
}
}
struct ChildView: View {
// Uzrauga nodoto DataModel instancei
@ObservedObject var observedData: DataModel
var body: some View {
VStack {
Text("Uzraudzītie dati bērnā: \(observedData.value)")
Button("Mainīt uzraudzītos datus") {
observedData.value = "Mainīts no bērna \(Int.random(in: 1...100))"
}
}
}
}