Görünüm Modellerini Görünümlere Bağlama
Görünüm modellerini SwiftUI ve Combine ile bağlayın.
Görünüm Modellerini Görünümlere Bağlama, CoddyKit'te ücretsiz bir Swift Academy dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Swift Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Swift Academy kursu toplamda 4 dersten oluşur.
ViewModel'i Görünüme Bağlama
Bir ViewModel, yalnızca Görünüm değişikliklerine tepki verdiğinde işe yarar. SwiftUI'da bu tepkisellik, Combine tabanlı @Published, @StateObject ve @ObservedObject özellik sarmalayıcılarıyla sağlanır.
Bunlar birlikte otomatik bir bağlama oluşturur: ViewModel değiştiğinde Görünüm yeniden görüntülenir.
ObservableObject
SwiftUI tarafından gözlemlenebilmesi için bir ViewModel'in ObservableObject protokolüne uyması gerekir. Bu protokol, her değişiklikten önce tetiklenen bir objectWillChange yayınlayıcısı sağlar.
final class CounterViewModel: ObservableObject {
@Published var count: Int = 0
func increment() {
count += 1
}
}@Published Özellikleri
Bir özelliği @Published ile işaretlemek, değeri her atandığında otomatik olarak bir değişiklik bildirimi yayınlar.
Her @Published özelliği nesnenin objectWillChange yayınlayıcısına veri sağlar; böylece Görünüm ne zaman yenilenmesi gerektiğini tam olarak bilir.
final class SearchViewModel: ObservableObject {
@Published var query: String = ""
@Published var results: [String] = []
}@StateObject
@StateObject, Görünüme bir ViewModel'i oluşturup sahiplenmesini söyler. SwiftUI onu bir kez örnekler ve bu Görünüm yeniden oluşturulsa da yaşatır.
ViewModel'in ilk oluşturulduğu yerde @StateObject kullanın.
struct CounterView: View {
@StateObject private var viewModel = CounterViewModel()
var body: some View {
Button("Count: \(viewModel.count)") {
viewModel.increment()
}
}
}@ObservedObject
@ObservedObject, başka yerde oluşturulup iletilen bir ViewModel içindir. Görünüm onu gözlemler, ancak yaşam döngüsüne sahip olmaz.
Bir üst görünümden ViewModel alan alt görünümler için kullanın.
struct BadgeView: View {
@ObservedObject var viewModel: CounterViewModel
var body: some View {
Text("Total: \(viewModel.count)")
}
}StateObject ile ObservedObject Karşılaştırması
Kritik fark sahipliktir:
- @StateObject — Görünüm ona sahiptir; yeniden görüntülenmelerden sonra da varlığını korur
- @ObservedObject — dışarıdan iletilir; Görünüm ona sahip değildir
Kullanmanız gereken yerde @StateObject yerine @ObservedObject kullanmak, nesnenin yeniden oluşturulmasına ve her üst güncellemede durumunu kaybetmesine neden olabilir.
ViewModel'i Alt Görünümlere Aktarma
Üst görünümde @StateObject ile ViewModel'i bir kez oluşturun, ardından onu @ObservedObject olarak işaretleyen alt görünümlere iletin.
struct ParentView: View {
@StateObject private var viewModel = CounterViewModel()
var body: some View {
VStack {
BadgeView(viewModel: viewModel)
Button("Add") { viewModel.increment() }
}
}
}İki Yönlü Bağlamalar
Metin alanları gibi girdiler için iki yönlü bir bağlamaya ihtiyacınız vardır. SwiftUI, sarmalayıcının başındaki $ önekiyle bir @Published özelliğinden bağlama oluşturur.
struct SearchView: View {
@StateObject private var viewModel = SearchViewModel()
var body: some View {
TextField("Search", text: $viewModel.query)
}
}Kullanıcı Arayüzü Durumunu Yönetme
Görünüm, gösterdiği her şeyi yayımlanmış özelliklerden türetmelidir. Yükleme göstergeleri, hata bildirimleri ve içerik ViewModel durumundan akışla gelir.
final class FeedViewModel: ObservableObject {
enum State { case loading, loaded([String]), error(String) }
@Published var state: State = .loading
}Duruma Tepki Verme
Görünüm, doğru kullanıcı arayüzünü oluşturmak için ViewModel durumuna göre seçim yapar. Buyurgan gösterme/gizleme kodu yoktur; yalnızca bildirimsel bir eşleme vardır.
struct FeedView: View {
@StateObject var viewModel = FeedViewModel()
var body: some View {
switch viewModel.state {
case .loading: ProgressView()
case .loaded(let items): List(items, id: \.self) { Text($0) }
case .error(let message): Text(message)
}
}
}Güncellemeleri Ana İş Parçacığında Tutma
SwiftUI, yayımlanmış değişikliklerin ana iş parçacığında yapılmasını gerektirir. Bir ViewModel eşzamansız işten sonra durumu güncellediğinde, bunu garanti etmek için @MainActor ile işaretleyin.
@MainActor
final class ProfileViewModel: ObservableObject {
@Published var name: String = ""
func load() async {
name = await fetchName()
}
}Hızlı Kontrol
Bağlamalar hakkındaki bilginizi sınayın.
Özet
SwiftUI bağlamalarını kullanarak ViewModel'leri Görünümlere bağladınız:
- ObservableObject + @Published değişiklik bildirimleri yayınlar
- @StateObject bir ViewModel oluşturur ve ona sahip olur
- @ObservedObject dışarıdan iletilen bir ViewModel'i gözlemler
- @MainActor eşzamansız güncellemeleri ana iş parçacığında tutar
Tepkisel bağlamalar yerleştirildiğinde Görünüm, en güncel ViewModel durumunu her zaman otomatik olarak yansıtır.
Sıkça Sorulan Sorular
“Görünüm Modellerini Görünümlere Bağlama” dersi ücretsiz mi?
Evet — “Görünüm Modellerini Görünümlere Bağlama” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Swift Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Swift Academy kursu toplamda 4 dersten oluşur.
“Görünüm Modellerini Görünümlere Bağlama” dersinde ne öğreneceğim?
Görünüm modellerini SwiftUI ve Combine ile bağlayın. Swift Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Swift Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Swift Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.
“Görünüm Modellerini Görünümlere Bağlama” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Swift Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Swift Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- MVVM Deseni
- Görünüm Modellerini Görünümlere Bağlama
- Coordinator Deseni
- Görünüm Modellerini Sınama