Skip to content

YamamotoDesu/ObservableArchitecture

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 

Repository files navigation

2024-06-30 17 28 54

//
//  ContentView.swift
//  SneakPeak
//
//  Created by Yamamoto Kyo on 2024/06/30.
//

import ComposableArchitecture
import SwiftUI

@Reducer
struct CounterFeature {
    @ObservableState
    struct State {
        var count = 0
        var isObservingCount = true
    }
    enum Action {
        case decrementButtonTapped
        case incrementButtonTapped
        case toggleIsObservingCount
    }
    var body: some ReducerOf<Self> {
        Reduce { state, action in
            switch action {
            case .decrementButtonTapped:
                state.count -= 1
                return .none
            case .incrementButtonTapped:
                state.count += 1
                return .none
            case .toggleIsObservingCount:
                state.isObservingCount.toggle()
                return .none
            }
        }
    }
}

struct ContentView: View {
    let store: StoreOf<CounterFeature>

    var body: some View {
        WithPerceptionTracking { // For iOS 15
            let _ = Self._printChanges()
            if self.store.isObservingCount {
                Text(self.store.count.description)
            }
            Button("Decrement") {
                self.store.send(.decrementButtonTapped)
            }
            Button("Increment") {
                self.store.send(.incrementButtonTapped)
            }
            Button("Toggle count observation") {
                self.store.send(.toggleIsObservingCount)
            }
        }
    }
}

#Preview {
  ContentView(
    store: Store(initialState: CounterFeature.State()) {
      CounterFeature()
    }
  )
}

Releases

No releases published

Packages

No packages published

Languages