URLSession 취소를 실패 알림으로 보여주지 않기
Swift concurrency에서 URLSession 요청을 취소했는데 에러 토스트가 뜨는 문제를 CancellationError와 URLError.cancelled 기준으로 정리한다.
Swift 6에서 매일 만나는 변화 7가지 — strict concurrency부터 typed throws까지
Swift 6에서 매일 실무 코드를 만질 때 부딪히는 변경 7가지 정리. strict concurrency 모드, Sendable 강제, typed throws, existential any 강화, migration mode 등.
AI가 짠 코드 PR 리뷰에서 AI한테 회신 떠넘기기
리뷰는 코드보다 코드의 의도에 대한 대화다. AI에게 회신까지 맡기면 리뷰가 사람-AI 대화가 되어 의도가 사라진다. PR 리뷰에서 AI를 어떻게 써야 할지 정리한 회고.
Swift mutating인데 self를 안 바꾸는 함수 — 컴파일 통과하는 시그니처의 함정
mutating 키워드는 self 변경 의도를 표현하는 계약이다. 컴파일러는 그 의미를 검증하지 않아서, self를 안 바꾸는 함수에도 mutating이 붙어 통과한다. PR 리뷰에서 만난 실제 사례와 builder 패턴 대안.
isPush 플래그가 만드는 Coordinator 흐름 분기 지옥
푸시 진입과 일반 진입을 isPush 플래그로 가르는 순간, dismiss 경로가 두 갈래로 갈리고 cascade finish가 의도와 정반대로 동작한다. 분기 자체가 정책과 어긋난 사례.
UIKit ↔ SwiftUI 브릿징 — UIViewRepresentable vs UIHostingController 언제 뭘 쓸지
UIKit과 SwiftUI를 같은 앱에서 섞어 쓸 때 등장하는 네 가지 다리(UIViewRepresentable, UIViewControllerRepresentable, UIHostingController, UIHostingConfiguration)의 용도, 패턴, 함정 정리.
UICollectionView CellRegistration — 옛날 register/dequeue 그만 쓰자
iOS 14에서 들어온 UICollectionView.CellRegistration. 문자열 reuse ID 안 만들어도 되고, as! 캐스팅도 사라지고, cell 등록과 설정 코드가 한 곳으로 모인다. 단독으로도 쓸 수 있다.
UICollectionViewDiffableDataSource 쓰면서 정리한 메모
UITableView/UICollectionView 데이터 소스의 새 표준. 옛날 cellForItemAt 패턴에서 DiffableDataSource로 옮기면서 정리한 기본 사용법, snapshot 동작, 흔한 사고.
withAnimation, .animation, .transition 헷갈릴 때 보는 메모
SwiftUI에서 상태 변화에 애니메이션 붙이려고 할 때 withAnimation, .animation modifier, .transition 셋이 어떻게 다른지. 그리고 .transition이 안 먹히는 흔한 케이스.