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))"
}
}
}
}