Durum, Eylem ve Reducer
Özellikleri, durum üzerinde çalışan saf reducer'lar olarak modelleyin.
Durum, Eylem ve Reducer, CoddyKit'te ücretsiz bir Swift Academy dersidir. Bu, 4 dersinin 1. 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.
Composable Architecture Nedir
Composable Architecture veya TCA, Swift uygulamalarını tutarlı ve test edilebilir bir yapıyla oluşturmak için kullanılan bir kitaplıktır. Üç parçaya odaklanır: özelliğinizin verilerini tanımlayan State, gerçekleşebilecek her olayı tanımlayan Action ve eylemlere yanıt olarak durumu değiştiren bir Reducer.
Bu tek yönlü akış, özellikleri öngörülebilir ve test etmeyi kolay hâle getirir.
import ComposableArchitecture
// State holds data, Action describes events,
// a Reducer turns (state, action) into the next state.@Reducer Makrosu
Bir özellik, @Reducer makrosuyla açıklanmış bir tür olarak tanımlanır. Makro, yardımcı kodu oluşturur ve State, Action ile indirgeyici body bildirimlerini tek ve bütünlüklü bir birimde bir arada yapmanıza olanak tanır.
Geleneksel olarak tür, CounterFeature gibi özelliğin adını alır.
import ComposableArchitecture
@Reducer
struct CounterFeature {
// State, Action, and body go here
}State Tanımlama
State genellikle bir özelliğin ihtiyaç duyduğu tüm verileri tutan bir yapı türüdür. Bunu @ObservableState ile işaretlemek, SwiftUI'nin değişiklikleri hassas biçimde gözlemlemesini ve yalnızca etkilenen bölümleri yeniden oluşturmasını sağlar.
Tek bir doğruluk kaynağı olması için durumu en küçük hâlinde tutun ve türetilmiş değerleri hesaplayın.
import ComposableArchitecture
@Reducer
struct CounterFeature {
@ObservableState
struct State: Equatable {
var count = 0
}
}Action Tanımlama
Action, özelliğin işleyebileceği her olayı listeler: kullanıcı dokunuşları, yanıtlar, zamanlayıcı sinyalleri ve benzerleri. Her durum, durumu doğrudan değiştirecek bir komutu değil, gerçekleşmiş bir şeyi adlandırır.
Anlaşılır eylem adları, özelliğin davranışını kendi kendine açıklamasını sağlar.
import ComposableArchitecture
@Reducer
struct CounterFeature {
@ObservableState
struct State: Equatable { var count = 0 }
enum Action {
case incrementTapped
case decrementTapped
}
}Reducer body
İndirgeyici mantığı, bazı ReducerOf<Self> döndüren hesaplanmış bir body özelliğinde bulunur. İçeride, değiştirilebilir state ile gelen action'ı alan bir kapanışla Reduce kullanırsınız.
Eylemleri inceler ve durumu buna göre değiştirirsiniz.
import ComposableArchitecture
@Reducer
struct CounterFeature {
@ObservableState
struct State: Equatable { var count = 0 }
enum Action { case incrementTapped, decrementTapped }
var body: some ReducerOf<Self> {
Reduce { state, action in
switch action {
case .incrementTapped:
state.count += 1
return .none
case .decrementTapped:
state.count -= 1
return .none
}
}
}
}Etkileri Döndürme
İndirgeyicinin her dalı bir Effect döndürmelidir. .none döndürmek, durum değişikliğinden sonra gerçekleştirilecek başka bir asenkron iş olmadığı anlamına gelir.
Ağ çağrısı gibi yan etkilere ihtiyaç duyduğunuzda, bu işi çalıştıran bir etki döndürürsünüz. Etkileri sonraki bir derste inceleyeceksiniz.
import ComposableArchitecture
// Every reducer branch returns an Effect.
// No side effect needed? Return .none.
// Need async work? Return an effect describing it.
Reduce { state, action in
state.count += 1
return .none
}State Değişiklikleri Merkezileştirilir
TCA'nın temel kurallarından biri, durumu yalnızca indirgeyicinin ve yalnızca eylemlere yanıt olarak değiştirmesidir. Görünümler durumu hiçbir zaman doğrudan değiştirmez; eylemler gönderir.
Değişiklikler için bu tek ve merkezi yer, veri akışını izlemeyi ve test etmeyi kolaylaştırır.
import ComposableArchitecture
// Views send actions; the reducer mutates state.
// store.send(.incrementTapped) -> state.count += 1
// No direct state mutation outside the reducer.Kullanıcı Girdisini State İçinde Modelleme
Form benzeri özellikler, düzenlenebilir alanları State içinde tutar ve değişiklikler için eylemler ekler. Özelliklere bağlamalar eklemek, SwiftUI denetimlerinin bunları tür güvenli bir şekilde eylemler aracılığıyla güncellemesini sağlar.
Burada bir özellik, bir metin alanını ve bir açma-kapama düğmesini izler.
import ComposableArchitecture
@Reducer
struct FormFeature {
@ObservableState
struct State: Equatable {
var name = ""
var isSubscribed = false
}
enum Action: BindableAction {
case binding(BindingAction<State>)
}
var body: some ReducerOf<Self> {
BindingReducer()
}
}İlişkili Değerlerle Action
Eylemler, ilişkili değerleri kullanarak veri taşıyabilir. Yüklenmiş bir öğe veya hata gibi geri dönen sonuçları modellemenin yolu budur; böylece indirgeyici bunları durumda saklayabilir.
Burada bir yanıt eylemi, alınan sayıyı taşır.
import ComposableArchitecture
@Reducer
struct NumberFeature {
@ObservableState
struct State: Equatable { var value = 0 }
enum Action {
case reloadTapped
case responseReceived(Int)
}
var body: some ReducerOf<Self> {
Reduce { state, action in
switch action {
case .reloadTapped:
return .none
case let .responseReceived(value):
state.value = value
return .none
}
}
}
}Equatable State'in Faydası
State'i Equatable ile uyumlu hâle getirmek, TCA'nın durumun gerçekten değişip değişmediğini algılamasını sağlar; bu da hassas görünüm güncellemelerini ve kapsamlı testleri mümkün kılar. Küçük bir gereksinim olmasına rağmen büyük faydalar sağlar.
Çoğu durum türü, saklanan özellikleri zaten Equatable olduğu için bunu ücretsiz olarak benimser.
import ComposableArchitecture
@ObservableState
struct State: Equatable {
var count = 0
var title = ""
}
// Equatable enables change detection and test assertions.Eksiksiz Bir Özelliğin Yapısı
Tamamlanmış bir özellik yukarıdan aşağıya şu sırayla okunur: makro, gözlemlenebilir durum, eylem numaralandırması ve indirgeyici body. Özellikle ilgili her şey tek bir türde bulunur; TCA özelliklerini birleştirilebilir ve incelenebilir yapan da budur.
Bu tutarlı yapı, bir uygulamadaki her özellikte tekrarlanır.
import ComposableArchitecture
@Reducer
struct CounterFeature {
@ObservableState
struct State: Equatable { var count = 0 }
enum Action { case incrementTapped, decrementTapped }
var body: some ReducerOf<Self> {
Reduce { state, action in
switch action {
case .incrementTapped: state.count += 1; return .none
case .decrementTapped: state.count -= 1; return .none
}
}
}
}Hızlı Kontrol: Üç Parça
TCA'de State, Action ve Reducer'ın rollerini hatırlayın.
Özet: State, Action ve Reducer
Bir TCA özelliğinin temelini öğrendiniz:
@Reducer, her şeyi tek bir yerde içeren bir özellik türü tanımlar.- Bir yapı üzerindeki
@ObservableState, özelliğin verilerini tutar ve hassas gözlemlemeyi etkinleştirir. - Bir
Actionnumaralandırması, isteğe bağlı olarak ilişkili değerlerle birlikte her olayı listeler. - İndirgeyici
body, durumu değiştirmek ve birEffectdöndürmek içinReducekullanır; yan etki gerekmediğinde.nonedöndürür. - Veri akışını öngörülebilir tutmak için durumu yalnızca indirgeyici değiştirir.
Sonraki adımda bu özelliği bir Store ile SwiftUI'ye bağlayacaksınız.
import ComposableArchitecture
// Recap: @Reducer + State + Action + body(Reduce)
// One type, one source of truth, predictable updates.Sıkça Sorulan Sorular
“Durum, Eylem ve Reducer” dersi ücretsiz mi?
Evet — “Durum, Eylem ve Reducer” 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.
“Durum, Eylem ve Reducer” dersinde ne öğreneceğim?
Özellikleri, durum üzerinde çalışan saf reducer'lar olarak modelleyin. 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 1. dersidir.
“Durum, Eylem ve Reducer” 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
- Durum, Eylem ve Reducer
- Store ve SwiftUI Entegrasyonu
- Efektler ve Bağımlılıklar
- Özellikleri Birleştirme ve Sınama