Sobes.tech
Middle

Ի՞նչ է state-ը, state օբյեկտը և observed օբյեկտը iOS զարգացման մեջ։

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