iOS өнүктүрүүдө state, state object жана observed object деген эмне?
sobes.tech AI
AIден жооп
State — бул SwiftUIдеги мүнөздөмө үчүн капталган, көргөзүүнүн жергиликтүү абалын башкарууга мүмкүндүк берет. @State менен капталган мүнөздөмөнүн мааниси өзгөргөндө, көргөзүү автоматтык түрдө жаңыртылат.
StateObject — бул SwiftUIдеги мүнөздөмө каптоо, ал ObservableObject протоколуна ылайык келген объектилерди түзүү жана башкаруу үчүн, алар көргөзүүнүн жашоо циклинин бир бөлүгү болуп саналат. Бул объектилерди іште түзүп, алардын менен жашаган учурлар үчүн эффективдүү.
ObservedObject — бул SwiftUIдеги мүнөздөмө каптоо, ал бар ObservableObject объектилердин шилтемелерин көзөмөлдөө үчүн, алар сырттан берилген. SwiftUI бул объектилердеги өзгөрүүлөрдү көзөмөлдөп, көргөзүүнү жаңыртат.
Салыштыруу таблицасы:
| Каптоо | Максаты | Ишке ашыруу | Колдонуу мисалы |
|---|---|---|---|
@State |
Жергиликтүү көргөзүүнүн абалы | Көргөзүү | Жөнөкөй эсептегич, көрүнүү белгиси |
@StateObject |
ObservableObject түзүү жана ээлик кылуу |
Көргөзүү | Көрсөтмө модел (ViewModel), көргөзүүдө түзүлгөн |
@ObservedObject |
Бар ObservableObject көзөмөлдөө |
Чыгарманын булагы | Көргөзмө модел (ViewModel), ата-энеден берилген |
@State колдонуу мисалы:
struct CounterView: View {
@State private var count: Int = 0 // Жергиликтүү абал
var body: some View {
VStack {
Text("Count: \(count)")
Button("Көбөйтүү") {
count += 1 // Абалдын өзгөрүшү жаңылоону чакырат
}
}
}
}
@StateObject жана @ObservedObject колдонуу мисалы:
import SwiftUI
// Маалымат моделине `ObservableObject`
class DataModel: ObservableObject {
@Published var value: String
init(value: String) {
self.value = value
}
}
struct ContentView: View {
// DataModelдин экземплярин түзүү жана ээлик кылуу
@StateObject private var localData = DataModel(value: "Баштапкы жергиликтүү мааниси")
var body: some View {
VStack {
Text("Жергиликтүү маалыматтар: \(localData.value)")
Button("Жергиликтүү маалыматтарды өзгөртүү") {
localData.value = "Өзгөртүлгөн жергиликтүү мааниси \(Int.random(in: 1...100))"
}
// localDataны балдар көргөзмөсүнө өткөрүү
ChildView(observedData: localData)
}
}
}
struct ChildView: View {
// Ата-энеден берилген DataModelдин экземплярин көзөмөлдөө
@ObservedObject var observedData: DataModel
var body: some View {
VStack {
Text("Баланын ичинде көзөмөлдөнгөн маалыматтар: \(observedData.value)")
Button("Көзөмөлдөнгөн маалыматтарды өзгөртүү") {
observedData.value = "Баладан өзгөртүлдү \(Int.random(in: 1...100))"
}
}
}
}