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