본문 바로가기
Swift

Swift TCA와 Environment로 앱의 라이프사이클 체크하기

by mr.conan 2023. 7. 25.
728x90
반응형

모델과 액션 정의

TCA의 기본 구성 요소인 상태(State)와 액션(Action)을 정의합니다.

import Foundation

struct AppState: Equatable {
    var isForeground: Bool = false
    var isBackground: Bool = false
}

enum AppAction {
    case setForeground(Bool)
    case setBackground(Bool)
}

 

리듀서 정의

앱의 상태(State)와 액션(Action)을 기반으로 리듀서를 정의합니다.

import ComposableArchitecture

let appReducer = Reducer<AppState, AppAction, AppEnvironment> { state, action, environment in
    switch action {
    case .setForeground(let isForeground):
        state.isForeground = isForeground
        environment.checkAppLifecycle(isForeground: isForeground)
        return .none

    case .setBackground(let isBackground):
        state.isBackground = isBackground
        environment.checkAppLifecycle(isBackground: isBackground)
        return .none
    }
}

 

환경(Environment) 정의

Environment를 사용하여 앱의 라이프사이클을 체크할 수 있도록 정의합니다.

import ComposableArchitecture

struct AppEnvironment {
    var checkAppLifecycle: (Bool, Bool) -> Void
}

 

앱 화면 구현

SwiftUI를 사용하여 앱 화면을 구현합니다.

import SwiftUI
import ComposableArchitecture

struct ContentView: View {
    let store: Store<AppState, AppAction>

    var body: some View {
        WithViewStore(self.store) { viewStore in
            VStack {
                Text("Foreground: \(viewStore.isForeground.description)")
                Text("Background: \(viewStore.isBackground.description)")
            }
            .onAppear {
                viewStore.send(.setForeground(true))
            }
            .onChange(of: viewStore.isBackground) { isBackground in
                viewStore.send(.setBackground(isBackground))
            }
        }
    }
}

 

위의 코드를 사용하여 블로그 형식으로 TCA와 Environment를 활용하여 앱의 라이프사이클을 체크하는 샘플 앱을 만들 수 있습니다. 앱이 실행되면 앱의 라이프사이클 변화에 따라 콘솔에 출력됩니다. Happy coding! 😊

728x90
반응형