일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 알고리즘
- 대외활동
- 멋사
- 백준
- spritekit
- dispatchqueue
- uikit
- 스유
- 네트워크
- cs
- 1일1알골
- 스위프트
- c++
- 웹
- SwiftUI
- 리액트
- widgetkit
- Swift
- TCA
- 영남대
- Protocol
- 위젯킷
- 멋쟁이사자처럼
- widget
- swift concurrency
- 컴퓨터그래픽스
- composable architecture
- 운영체제
- 후기
- 문법
- Today
- Total
목록앱/SwiftUI (31)
맛동산이
두개의 reducer와 state그리고 화면을 이동하는 방법을 사용할때는@PresentsPresentationActionifLet을 사용하게 된다.1. 먼저 가고자 하는 뷰의 State를 @Presents로 감싼다.또한 네이게이션 stack이 될 array을 생성한다. (보편적으로 스택의 경우에는 최상단의 뷰가 가지면 된다.)밑의 코드에서는 concats가 stack이 될 array @ObservableState struct State: Equatable { @Presents var addContact: AddContactFeature.State? var contacts: IdentifiedArrayOf = [] }해당 뷰로 이동할지 안할지 모르니까 옵셔널 값.2. 해당 뷰로 이동하는 액..
Effect는 Action을 통해서 동작할 동작들을 의미한다.Effect에는 다음과 같은 동작들이 존재한다 .none: 즉시 완료run: 비동기 작업send: 전달된 Action을 즉시 내보냄cancel: 진행중인 Effect를 취소merge: 동시에 실행되는 단일 Effect로 병합concatenate: 차례로 실행되는 단일 Effect로 연결animation: SwiftUI의 .withAnimationtranscation: SwiftUI의 .withTransactiondebounce: debounce Effect로 변경throttle: trottle Effect로 변경Effect는 기본적으로 단일의 행동을 하도록 하고, 여러 동작을 묶을수도 있으며, 연쇄적으로 동작할수도 있다.예시 )Reduce { ..
TCA의 큰 흐름은, 뷰가 존재하고, 뷰에서의 이벤트를 감지해서 Action으로 그리고 해당 Action을 Effect로, Effect를 통해서 State를 변경해주는 방법이다.즉View→Action→Effect→State→View의 큰 흐름이 된다.이때 Action이 방대해지면, Action을 명확하게 어떠한 액션인지 구분하기 어렵게 된다.이를 해결하기 위해서 NestedAction을 통해서 액션의 타입을 명확하게 구분해주는 것으로코드의 명확성과 가독성을 올리는 방법을 소개하려고 한다.enum Action { case onAppear case task case tapOpenButton //현재는 taskResult는 duplicated될 예정이기 때문에 Result를 사용하는게 좋다. case upLo..
예를 들어서, 로그인 상태를 바라본다고 했을때로그인 상태는 앱이 시작됨과 동시에 계속해서 해당 값을 바라보고 있다가.로그아웃이 될때 앱의 화면을 변경해줘야하는 상황이 발생한다.이처럼 앱 전반적으로 해당 상태를 옵저빙 해야하는 경우가 발생하고 이를 해결할수 있는 방법이 크게shared stateasyncStream가 있다.AsyncStream을 통한 공유 상태 처리하는 법Shared data in a TCA app1. Dependency 정의해주기struct AuthenticationClient: Sendable { var currentUser: @Sendable () -> AppUser? var listenAuthState: @Sendable () async throws -> AsyncThro..
TCA에서는 State와 Reducer가 서로 얽히고 설켜있는 상태를 보기가 쉽다.특히나 화면전환에서는 SwiftUI에서는 상태값에 따른 화면 변화가 많은데, 이러한 경우 초기 값을 nil로 설정해주기 때문에 이러한 화면에 대한 언래핑이 필요하다.SwiftUI 에서의 기본적인 화면 전환은 다음과 같다.struct MainView { @State var isUserLogged: Bool = false var body: some View { if isUserLogged { MainTabView() } else { LoginView() } }}이러한 경우 TCA에서는 해당 값을 State로 받아야하고 해당 State는 옵셔널 값이 되는데이러한 옵셔널 State를 안전하게 언래핑 하는 방법..
기본적인 비동기var body: some ReducerOf { Scope(state: \\.login, action: \\.login) { Login() } Reduce { state, action in switch action { case .test1: return .run { 여기 안에서 비동기를 처리 해준다. } case .fetch(.success): return .none case .fetch(.failure): return .noneTCA에서는 비동기 처리를 해줄..
💡 TCA는 단방향 아키텍쳐로, 상태관리가 용이하고, 데이터 흐름이 명확하게 정의되어 있기 때문에 단방향으로 이해하기 쉽습니다.TCA 의 장점모듈화: TCA는 애플리케이션을 작은 모듈로 나누어 관리할 수 있도록 도와줍니다. 각 모듈은 독립적으로 테스트하고, 유지보수할 수 있어 코드의 가독성과 재사용성이 향상됩니다.예측 가능성: 상태의 변화가 명확하게 정의되어 있어, 애플리케이션의 동작을 예측하기 쉽습니다. 모든 상태 변화는 액션을 통해 이루어지며, 이는 디버깅과 유지보수를 용이하게 만듭니다.테스트 용이성: TCA는 테스트를 쉽게 할 수 있도록 설계되었습니다. 상태, 액션, 리듀서를 독립적으로 테스트할 수 있어, 각 모듈의 동작을 검증하는 데 유리합니다.상태 관리: TCA는 중앙 집중식 상태 관리를 제공..
위젯 동작과, 내용에 관해서는 이전 글을 참고하시길 바랍니다.간단하게 설명하자면 위젯에서는EntryProviderWidgetView로 크게 나누게 되며, Provider가 Entry를 Timeline에 맞춰서 새로 생성하여 배열에 담고, 해당 타임라인 시간에 맞춰서 entry배열에 담긴 화면을 그리는것이 위젯의 기본 동작이다.iOS 17버전 이전에서는 위젯에서는 위젯을 눌러서 앱을 실행하는 동작 이외에는 어떠한 버튼 동작이 불가능했다.하지만 iOS17 이상에서는 위젯에 버튼액션이 가능한데 이를 정리해보고자 한다.AppIntent2023 button 을 이해하기 위해서는 우선 appIntent라는것에 대해서 이해해야한다.간략하게 말하자면, appIntent는 시스템에서 앱의 기능이나 컨텐츠를 사용할수 있도..
위젯 동작과, 내용에 관해서는 이전 글을 참고하시길 바랍니다. 간단하게 설명하자면 위젯에서는 Entry Provider Widget View 로 크게 나누게 되며, Provider가 Entry를 Timeline에 맞춰서 새로 생성하여 배열에 담고, 해당 타임라인 시간에 맞춰서 entry배열에 담긴 화면을 그리는것이 위젯의 기본 동작이다. iOS 17버전 이전에서는 위젯에서는 위젯을 눌러서 앱을 실행하는 동작 이외에는 어떠한 버튼 동작이 불가능했다. 하지만 iOS17 이상에서는 위젯에 버튼액션이 가능한데 이를 정리해보고자 한다. AppIntent 2023 button 을 이해하기 위해서는 우선 appIntent라는것에 대해서 이해해야한다. 간략하게 말하자면, appIntent는 시스템에서 앱의 기능이나 컨..