Sobes.tech
Middle

iOS geliştirmede state, state object ve observed object nedir?

sobes.tech yapay zeka

AI'dan gelen yanıt

State — SwiftUI'da, görünümün yerel durumunu yönetmeye olanak tanıyan bir özellik sarmalayıcıdır. @State ile sarmalanmış özelliğin değeri değiştiğinde, görünüm otomatik olarak güncellenir.

StateObject — SwiftUI'da, ObservableObject protokolüne uygun nesneleri oluşturmak ve yönetmek için kullanılan bir özellik sarmalayıcıdır ve görünümün yaşam döngüsünün bir parçasıdır. İçinde oluşturulan ve onunla yaşayan nesneler için etkilidir.

ObservedObject — SwiftUI'da, dışarıdan geçirilen ve ObservableObject protokolüne uygun mevcut nesnelerin referanslarını yönetmek için kullanılan bir özellik sarmalayıcıdır. SwiftUI, bu nesnelerdeki değişiklikleri izler ve görünümü günceller.

Karşılaştırmalı tablo:

Sarmalayıcı Amaç Sahiplik Kullanım örneği
@State Yerel görünüm durumu Görünüm Basit sayaç, görünürlük bayrağı
@StateObject ObservableObject oluşturma ve sahip olma Görünüm Görünümde oluşturulan ViewModel modeli
@ObservedObject Varolan ObservableObject takibi Dış kaynak Üst görünümden geçirilen ViewModel modeli

@State kullanımı örneği:

struct CounterView: View {
    @State private var count: Int = 0 // Yerel durum

    var body: some View {
        VStack {
            Text("Count: \(count)")
            Button("Artır") {
                count += 1 // Durum değişikliği otomatik güncellemeye neden olur
            }
        }
    }
}

@StateObject ve @ObservedObject kullanımı örneği:

import SwiftUI

// Veri modeli için ObservableObject
class DataModel: ObservableObject {
    @Published var value: String
    
    init(value: String) {
        self.value = value
    }
}

struct ContentView: View {
    // DataModel örneğini oluştur ve sahip ol
    @StateObject private var localData = DataModel(value: "İlk Yerel Değer")

    var body: some View {
        VStack {
            Text("Yerel Veriler: \(localData.value)")
            Button("Yerel Veriyi Değiştir") {
                localData.value = "Değiştirilen Yerel Değer \(Int.random(in: 1...100))"
            }
            
            // localData'yı çocuk görünümüne geçir
            ChildView(observedData: localData)
        }
    }
}

struct ChildView: View {
    // Ebeveyn tarafından geçirilen DataModel örneğini izleme
    @ObservedObject var observedData: DataModel

    var body: some View {
        VStack {
            Text("Çocukta gözlemlenen veriler: \(observedData.value)")
            Button("Gözlemlenen veriyi değiştir") {
                observedData.value = "Çocuk tarafından değiştirildi \(Int.random(in: 1...100))"
            }
        }
    }
}