| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 | 31 |
- swift concurrency
- SWIFT
- 자바공부
- 독서일기
- 토이프로젝트
- MVVM-C
- SOPT
- java
- 리뷰
- 백준
- IOS
- 자바 스터디
- 플러터
- 오블완
- 일기
- Flutter
- 영화리뷰
- 프로그래머스
- 코딩공부
- 영화일기
- sopt 35기
- 자바
- 키노
- sopt ios
- 티스토리챌린지
- Flutter Toy Project
- 영화후기
- 영화기록
- 새벽녘 소소한 기록
- 영화
- Today
- Total
목록전체 글 (118)
새벽의 기록
iOS 26이 출시되면서 온갖 버그들이 출몰하기 시작했는데,다이나믹 아일랜드 이전 폼팩터인 노치 형태의 시뮬레이터에서 발생하는 rdar:45025538 를 접하게 되었다. 시뮬레이터 화면 상 네비게이션 바 부분에 사진과 같은 빨간 경고 라인이 보이고 상하단의 검정 여백이 생기며 화면이 이상하게 보여지는 버그다. 진행중이던 프로젝트 CS 과정 중 발견한 이슈를 해결하기 위해 오랜만에 시뮬레이터를 실행시키니 마주하게 되었다. 애플 디벨로퍼 포럼 관련 포스팅에 달려있는 코멘트를 보고일단 임시방편으로 해결해서 그 방법을 기록해두려고 한다. 애플 개발자분이 버그가 발생한 자세한 케이스를 요구하는 걸 보니 아직 해결되지 않은 문제인가보다. 해당 포스트 주소https://developer..
목표: 지금껏 만든 카운터를 앱의 첫 번째 탭에 넣고, 두 번째 탭에는 새로운 기능을 넣어서 진짜 앱다운 구조를 만든다.ProfileFeature.swift 만들기import SwiftUIimport ComposableArchitecture@Reducerstruct ProfileFeature { @ObservableState struct State: Equatable { var nickname = "Guest" } enum Action: BindableAction { case binding(BindingAction) } var body: some Reducer { BindingReducer() }}struct Pro..
목표: TCA의 @Dependency를 사용해보기1. Task.sleep 수정하기 지금 코드에 있는 Task.sleep은 실제 시간을 쓴다. 이게 왜 문제일까? 나중에 테스트 코드를 짤 때, 테스트가 끝날 때까지 진짜 1초를 멍하니 기다려야 하기 때문이다. (테스트가 100개면 100초...) TCA의 @Dependency중 ContinuousClock를 사용해서 개선해보자. import SwiftUIimport ComposableArchitecture@Reducerstruct CounterFeature { @ObservableState struct State: Equatable { var count = 0 var isLoading = false var i..
목표: 카운터 앱에 "알림 켜기/끄기(Toggle)" 스위치와 "메모 입력(TextField)" 기능을 추가.import SwiftUIimport ComposableArchitecture@Reducerstruct CounterFeature { @ObservableState struct State: Equatable { var count = 0 var isLoading = false var isTimerEnabled = false var memo = "" } enum Action: BindableAction { case incrementButtonTapped case decrementButtonTappe..
앱은 단순히 더하기 빼기만 하지 않는다. API 통신, 타이머, 데이터 저장 같은 복잡한 요구사항과 작업들을 해야 한다. TCA에서는 이를 Effect라고 부른다. 목표: 지난번 만든 카운터 앱에 "1초 뒤에 증가하기" 버튼 추가.Reducer는 순수 함수여야 한다. 즉, 같은 입력(State, Action)이 들어오면 항상 같은 결과가 나와야 한다. 하지만 DispatchQueue.main.asyncAfter 같은 건 순수하지 않다.그래서 TCA는 return .none 대신 return .run { send in ... } 을 사용해서 비동기 작업을 수행한다. import SwiftUIimport ComposableArchitecture@Reducerstruct CounterFeature { @..
UIKit만을 사용하던 과거와는 달리, 최근 흐름에 속하는 SwiftUI에서의 데이터 바인딩은 굳이 ViewModel을 두지 않더라도 View 자체에서 프로퍼티 래퍼를 사용하는 방식으로 구현할 수 있다. 다만 "비즈니스 로직까지 View에서 처리해야 하는가?"라는 질문에 대한 답이 "No"라면, 이에 대한 해결책으로 등장하는 흐름이 "단방향 데이터 흐름 (Unidirectional Data Flow)"이다. 여기서 데이터 바인딩이 아니라 비즈니스 로직을 View로부터 보다 효율적으로 분리하는 과정에서 떠올리게 된 단방향 데이터 흐름 구조가 Flux였고, TCA는 이 단방향 데이터 흐름이라는 Flux 컨셉을 받아 발전시킨 아키텍처 라이브러리다. ✔️선언형 프로그래밍 방식 (SwiftUI)에서 적합한 데이터..