TCA 23

[TCA] HigherOrderReducers #2 (ReusableFavoriting)

[TCA] HigherOrderReducers (ReusableFavoriting) 목차 - 개념설명 - 예제코드 # 개념설명 이번에는 재사용 가능한 하나의 컴포넌트를 도메인, 로직, 뷰에 이르기까지 어떻게 처리하는지를 소개. 이번 기능은 "좋아요" 기능을 가지고 있으며, 버튼 액션을 통해 자신의 상태도 변경 가능하다. 해당 버튼을 누르면 UI에 즉시 반영되고 DB를 변경하거나, API 요청을 하는 등 필요한 작업을 수행하기 위한 효과가 발생. 실행에 1초가 걸리고 25% 확률로 실패하도록 예제를 만들었으며, 실패할 경우 상태가 롤백되고 경고 알럿이 나타남. # 예제코드 // MARK: - Reusable favorite component // 🟠 1. 재사용 가능한 FavoriteState를 선언 st..

apple/TCA 2023.10.29

[TCA] HigherOrderReducers #1 (Recursion)

[TCA] HigherOrderReducers #1 (Recursion) 목차 - 이번 주제에 대한 간략 설명 - 예제 코드 # 이번 주제에 대한 간략 설명 이번에는 재귀를 통해 View를 관리 하는 방법을 알아볼 예정 # 예제 코드 주요하게 살펴볼 부분 1. State를 rows로 다시 들고 있음으로써 Nested 형태를 구성 2. Action에는 간접 참조를 위해 indirect enum으로 선언 3. Reducer에 forEach(...) { Self() } 형태로 참조 struct Nested: Reducer { struct State: Equatable, Identifiable { let id: UUID var name: String = "" var rows: IdentifiedArrayOf =..

apple/TCA 2023.10.11

[TCA] Navigation (화면전환 총 정리)

[TCA] Navigation TCA의 Navigation에 대해서 공부하고 정리해보자. 서비스 개발에서 사용하는 화면전환 방식으로는 몇 가지가 있는데, 우선적으로 자주 사용하는 것들을 정리하고, 추가적으로 필요한 것들이 있을 때마다 포스팅을 업데이트 해보자! 이번에 알아볼 목차! - 일반적인 sheet 화면전환 - navigationDestination, popover, sheet 사용 - NavigationStack (feat. Path & destination) - 여러개의 뷰를 한번에 이동시켜야 할 경우 - struct Path: Reducer { ... } - NavigationStack의 View 단에서 처리 - StackElementID - ScreenA - 스스로 dismiss - Scre..

apple/TCA 2023.10.09

[TCA] Effect #6 (WebSocket)

[TCA] Effect #6 (WebSocket) 목차 - 이번에 할 실습에 대한 설명 - 웹소켓 개념에 대해서 설명은 생략 - 나의 이전 작업에서의 웹소켓과 연관지어 생각해보기 - TCA WebScoket 예제 # 이번에 할 실습에 대한 설명 URLsession의 웹소켓용 API를 위한 간단한 Wrapper를 만들어 소켓 서버에 접속하여 테스트한 후 메시지를 전송 후 소켓 서버는 즉시 메시지를 클라이언트에게 회신. - 나의 이전 작업에서의 웹소켓과 연관지어 생각해보기 내가 개발을 처음 공부할 당시에는 웹소켓을 이렇게 많이 다루리라고 생각하지 못했는데, 메인으로 사용하고 있음. 처음 이론이 아닌 웹소켓을 접하게 된 것은 Kuring프로젝트에서 검색파트를 구현하면서 처음 알게 되었는데, 당시에는 StarS..

apple/TCA 2023.10.08

[TCA] Effect #5 (Timers)

[TCA] Effect #5 (Timers) 목차 - Timers 주제에 대해서 간단히 알아보기 - Timers와 관련한 예제 # Timers 주제에 대해서 간단히 알아보기 @Dependency(\.continuousClock) var clock 위의 디펜던시 예제처럼 사용할 수 있음 Swift Clocks 라이브러리에서 제공하는 Helper인 클럭에 .timer 메서드를 사용 비동기 코드로 시간을 처리하기 위한 `AsyncSequence` 친화적인 API를 제공 # Timers와 관련한 예제 // MARK: - Feature domain struct Timers: Reducer { struct State: Equatable { var isTimerActive = false var secondsElaps..

apple/TCA 2023.10.07

[TCA] Effect #4 (Refreshable)

[TCA] Effect #4 (Refreshable) 목차 - Refreshable에 대한 - Refreshable을 사용하는 예제 # Refreshable에 대한 이번에는 List를 리프레시 하는 방법에 대해서 알아보자 이번에는 버튼을 클릭해서 API 콜하는게 아니라 리프레시를 통해 API를 콜 할 예정이다. 특이점으로는 viewStore.send(..., animation: ) 으로 animation을 건네주어 볼 예정! # Refreshable을 사용하는 예제 // MARK: - Feature domain struct Refreshable: Reducer { struct State: Equatable { var count = 0 var fact: String? } enum Action: Equata..

apple/TCA 2023.10.07

[TCA] Effect #3 (LongLiving)

[TCA] Effect #1 (LongLiving) 목차 - LongLiving에 대한 설명 - Effect LongLiving 예제 살펴보기 # LongLiving에 대한 설명 이번에는 NotificationCenter의 알림들처럼 effect의 라이프사이클이 긴 것들을 처리하는 방법과 그것들을 View의 라이프 사이클과 연결하는 방법에 대해서 알아보고자 함. 이번에는 스크린샷을 여러번 찍으면서 UI의 카운트가 몇번이나 발생하는지 관찰하는 예제 그런 다음 다른 화면으로 이동하여 스크린샷을 촬영한 후 이 화면에서 스크린샷이 *not* 카운트되는지 확인하고, 해당 화면을 떠나면 노티피케이션 효과가 자동으로 취소되고 화면에 들어갈 때 다시 시작. # Effect LongLiving 예제 살펴보기 import..

apple/TCA 2023.10.07

[TCA] Effect #2 (Cancellation)

[TCA] Effect #1 (Cancellation) 목차 - 해당 예제와 관련한 설명 - 해당 예제 코드 # 해당 예제와 관련한 설명 This screen demonstrates how one can cancel in-flight effects in the Composable Architecture. Use the stepper to count to a number, and then tap the "Number fact" button to fetch a random fact about that number using an API. While the API request is in-flight, you can tap "Cancel" to cancel the effect and prevent it fro..

apple/TCA 2023.10.07

[TCA] Effect #1 (Basics)

[TCA] Effect #1 (Basics) 목차 - Effect란? - Effect Basic 예제 살펴보기 - Effect란? TCA로 만들어진 기능에 Side Effect을 도입할 수 있음. Side Effect란 외부에서 수행되어야 하는 작업들로 API 요청, HTTP를 통해 외부 서비스를 사용하는 등 불확실하며 복잡하기도 함. - 영어 용어 정리 NB: nota bene라는 라틴어로 주의, 유의라는 의미 - Effect Basic 예제 살펴보기 import ComposableArchitecture import SwiftUI // MARK: - Feature domain struct EffectsBasics: Reducer { struct State: Equatable { var count = 0..

apple/TCA 2023.10.07

[TCA] SharedState

[TCA] SharedState 목차 - SharedState란? - SharedState 예제 코드 알아보기 - SharedState를 통해 통합관리 vs 각각의 Reducer를 통합 - SharedState란? 여러 개의 독립된 화면이 합성 가능한 아키텍처에서 상태를 공유할 수 있는 방법을 제시. - SharedState 예제 코드 알아보기 // MARK: - Feature domain struct SharedState: Reducer { enum Tab { case counter, profile } struct State: Equatable { var counter = Counter.State() var currentTab = Tab.counter /// The Profile.State can be..

apple/TCA 2023.09.27