URLSession 취소를 실패 알림으로 보여주지 않기
Swift concurrency에서 URLSession 요청을 취소했는데 에러 토스트가 뜨는 문제를 CancellationError와 URLError.cancelled 기준으로 정리한다.
NavigationStack path가 커질 때 Route enum으로 버티기
SwiftUI NavigationStack에서 여러 모델 타입을 path에 직접 넣다가 화면 전환이 흩어진 경험과 Route enum으로 목적지를 모으는 기준을 정리한다.
SwiftUI @State 초기값이 바인딩을 따라 바뀌지 않을 때
SwiftUI View init에서 @State를 Binding 값으로 초기화했다가 부모 값 변경을 놓친 경험과 draft state, onChange, id 재생성 기준을 정리한다.
SwiftUI searchable 붙이고 검색 상태가 지저분해졌을 때
SwiftUI searchable에서 입력 중인 searchText, 실제 API query, 검색 결과 상태를 한 값에 묶었다가 꼬인 경험과 상태를 나눠 정리한 패턴.
UICollectionViewCompositionalLayout 가로 스크롤 섹션에서 삐끗한 것들
UICollectionViewCompositionalLayout에서 orthogonalScrollingBehavior로 가로 스크롤 섹션을 만들 때 paging, group width, estimated size, section inset에서 자주 헷갈린 지점을 정리한다.
iOS 17에서만 죽는 SwiftData 크래시 — unmanaged @Model의 함정
ModelContext 밖에서 init한 @Model의 합성 getter가 iOS 17 런타임에서 SIGABRT — 운반은 순수 struct로 바꿨다.
SwiftUI TextField 숫자 입력이 자꾸 되돌아갈 때
SwiftUI TextField에 Int를 바로 묶었다가 빈 입력과 검증 타이밍에서 막혔다면 String 입력 상태를 따로 두는 방법이 편하다.
@Bindable vs @Binding, 둘이 뭐가 다른지 한 번 정리
iOS 17에서 @Bindable이 추가되면서 @Binding이랑 헷갈리기 시작했다. 언제 뭘 써야 하는지 한 번에 정리.
SwiftUI #Preview가 자꾸 죽을 때 점검할 패턴들
Environment·SwiftData 컨테이너만 챙겨도 Preview crash 대부분이 사라진다.