Sobes.tech
Middle

iOS inkişafında state, state object və observed object nədir?

sobes.tech Süni İntellekt

AI-dan cavab

State — SwiftUI-də görünüşün yerli vəziyyətini idarə etməyə imkan verən property wrapper-dir. @State ilə örtülmüş property-in dəyəri dəyişdikdə, görünüş avtomatik yenilənir.

StateObject — SwiftUI-də ObservableObject protokoluna uyğun obyektləri yaratmaq və idarə etmək üçün property wrapper-dir və görünüşün həyat dövrünün bir hissəsidir. İçində yaradılan və onunla yaşayan obyektlər üçün effektivdir.

ObservedObject — SwiftUI-də mövcud obyektlərə istinadları idarə etmək üçün property wrapper-dir və bu obyektlər kənardan ötürülmüşdür. SwiftUI bu obyektlərdəki dəyişiklikləri izləyir və görünüşü yeniləyir.

Müqayisəli cədvəl:

Wrapper Məqsəd Sahiblik İstifadə nümunəsi
@State Yerli görünüm vəziyyəti Görünüm Sadə sayğac, görünürlük bayrağı
@StateObject ObservableObject yaratmaq və idarə etmək Görünüm Görünüm daxilində yaradılan ViewModel modeli
@ObservedObject Mövcud ObservableObject-ə nəzarət Xarici mənbə Ata görünümündən ötürülən ViewModel modeli

@State istifadə nümunəsi:

struct CounterView: View {
    @State private var count: Int = 0 // Yerli vəziyyət

    var body: some View {
        VStack {
            Text("Count: \(count)")
            Button("Zənginləşdir") {
                count += 1 // Vəziyyətin dəyişməsi yeniləməni tetikler
            }
        }
    }
}

@StateObject@ObservedObject istifadə nümunəsi:

import SwiftUI

// Data modeli üçün ObservableObject
class DataModel: ObservableObject {
    @Published var value: String
    
    init(value: String) {
        self.value = value
    }
}

struct ContentView: View {
    // DataModel nümunəsini yaradın və sahibi olun
    @StateObject private var localData = DataModel(value: "İlkin Yerli Dəyər")

    var body: some View {
        VStack {
            Text("Yerli Dəyərlər: \(localData.value)")
            Button("Yerli Dəyərləri dəyiş") {
                localData.value = "Dəyişdirilmiş Yerli Dəyər \(Int.random(in: 1...100))"
            }
            
            // localData-ı uşaq görünümünə ötürün
            ChildView(observedData: localData)
        }
    }
}

struct ChildView: View {
    // Ata tərəfindən ötürülən DataModel nümunəsini izləyin
    @ObservedObject var observedData: DataModel

    var body: some View {
        VStack {
            Text("Uşaqda müşahidə olunan məlumatlar: \(observedData.value)")
            Button("Müşahidə olunan məlumatları dəyiş") {
                observedData.value = "Uşaqdan dəyişdirildi \(Int.random(in: 1...100))"
            }
        }
    }
}