POSTS

72
P_001 · SWIFT

공용 SwiftUI 컴포넌트의 마진, 누구 책임이지?

padding 두 번 먹이면 안쪽으로 두 배 들어간다. 공용 컴포넌트 마진 정책을 정하자.

MAY 14, 2026 · 4 MIN
#swiftui#uikit#uihostingcontroller
P_002 · SWIFT

SwiftUI 펼침/접힘 애니메이션에 대한 나의 생각

UIHostingController 너머의 SwiftUI 애니메이션, 만져봐야 결국 step-jump가 이긴다.

MAY 14, 2026 · 5 MIN
#swiftui#uikit#uihostingcontroller
P_003 · SWIFT

Swift 프로토콜에 옵셔널 property 넣을 뻔한 이야기

옵셔널 요구사항을 만들고 싶어지면 멈춰라. 십중팔구 프로토콜이 두 개여야 한다.

MAY 14, 2026 · 4 MIN
#swift#protocol#optional
P_004 · SWIFT

`final class` 상속 막혔을 때 컴포지션 써본 후기

final 막힌 클래스를 만났을 때, 격언만 외우다 놓친 진짜 답.

MAY 14, 2026 · 4 MIN
#swift#ios#uikit
P_005 · SWIFT

GCD 시리얼 큐로 로그 라이터를 재작성한 이유 — actor + AsyncStream을 버린 결정

actor는 mutual exclusion을 보장하지만 thread identity는 보장하지 않는다. Realm/SwiftData 같은 thread-confined 자원에는 GCD serial queue가 답인 이유.

MAY 13, 2026 · 5 MIN
#swift#concurrency#gcd
P_006 · SWIFT

47개 @Model 중 4개만 보존하기 — default-safe 정책 설계

47개 @Model 중 4개만 보존하고 43개는 삭제하는 정책을 설계하면서 만난 네 가지 후보. 누락이 안전을 깨지 않는 design 원칙: default = 삭제, 정책 = 한 곳, 적용 = 자동화.

MAY 13, 2026 · 3 MIN
#swiftdata#architecture#designpattern
P_007 · SWIFT

SwiftData #Predicate에서 enum 비교가 0건을 반환하는 이유

SwiftData #Predicate가 사용자 정의 enum을 만나면 throw 없이 0건을 반환한다. SQL 번역 실패가 침묵으로 드러나는 함정. raw value 컬럼, Swift filter, PK 인코딩 세 가지 우회법.

MAY 13, 2026 · 4 MIN
#swiftdata#predicate#enum
P_008 · SWIFT

@Model 스캐폴드 id + .unique 제약 = 조용한 데이터 손실

SwiftData에서 sentinel default id(.invalidInt = -1)와 @Attribute(.unique)와 try?가 만나면 100건이 1건으로 줄어든다. 에러 없이. 다층 방어로 막는 법.

MAY 13, 2026 · 3 MIN
#swiftdata#attribute#unique