Sobes.tech
Middle

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