GPT 5.1 Pro를 사용해서 이 글을 AGENTS.MD 파일에 쓸 수 있는 가장 핵심적인 내용으로 변환하는 방법을 13분 동안 고민했습니다. 결과는 다음과 같습니다. ## AI가 생성한 Swift/SwiftUI 정리 규칙 이 저장소에 대한 Swift/SwiftUI를 편집하거나 생성할 때 변경 사항을 반환하기 전에 다음 체크리스트를 사용하여 코드를 적극적으로 정규화하세요. - 최신 API: `NavigationView`를 `NavigationStack`으로, `navigationBarTitle`/`navigationBarItems`를 `navigationTitle`/`toolbar`로 교체합니다. 더 이상 사용되지 않는 수정자보다 새로운 수정자를 선호합니다. 가능한 경우 콜백 스타일 API보다 Swift 동시성(`async`/`await`, `Task`)을 선호합니다. - 상태 정확성: 로컬 값 상태에는 `@State`를 사용하고, 부모 소유 상태에는 `@Binding`을 사용하고, 뷰에서 생성된 장기 참조 유형에는 `@StateObject`를 사용하고, 주입된 참조 유형에는 `@ObservedObject`를 사용합니다. `body` 내부에 `ObservableObject` 인스턴스를 절대 만들지 마세요. - 선택 사항 및 오류: 실제로 복구할 수 없는 상황을 제외하고 `!`와 `try!`를 제거합니다. `if let` / `guard let` / `??` 및 `do/try/catch`를 사용합니다. 침묵의 실패 대신 명시적인 오류 경로(결과 유형, 오류 뷰, 알림)를 통해 실패를 표면화합니다. - 컬렉션 및 ID: `List`/`ForEach`에서 참조 유형의 `0..<count` 및 `\.self`보다 안정적인 ID(`id: \.id` 또는 전용 `id` 속성)를 선호합니다. 저장된 속성으로 충분할 경우 `body`에서 컬렉션을 다시 생성하지 마세요. - 뷰 구조: 중첩된 `VStack`/`HStack`/`ZStack`을 평면화합니다. 많은 `Spacer()`로 구성된 레이아웃을 정렬, 패딩 및 적절한 컨테이너로 바꿉니다. 레이아웃을 복제하는 대신 반복되는 하위 트리를 추출하여 재사용 가능한 뷰로 만듭니다. - 유형 삭제: 이기종 뷰 유형이 실제로 필요하지 않은 한 `AnyView` 및 기타 불필요한 유형 삭제는 피하세요. 구체적인 뷰 유형과 구성을 선호하세요. - 동시성 및 스레딩: UI에 영향을 미치는 진입점을 `@MainActor`로 표시하여 메인 스레드 차단을 방지합니다. 비동기 작업을 사용하여 비용이 많이 드는 작업을 메인 액터에서 다른 곳으로 옮깁니다. 완료 핸들러와 작업이 불필요하게 강력한 `self`를 캡처하지 않도록 합니다. - 부작용: `body`에서 네트워크 호출, 디스크 I/O, 타이머 및 기타 부작용을 제거합니다. 이를 라이프사이클 수정자(`task`, `onAppear` 등)에서 트리거되는 뷰 모델, 서비스 또는 명시적 작업으로 이동합니다. - 성능 저하 요인: `DateFormatter`, `NumberFormatter`, 난수 값, 무거운 계산을 `body`에 직접 생성하지 마세요. 정적 속성이나 전용 도우미에 캐시하세요. 대용량 데이터 구조의 불필요한 복사를 피하세요. - 스타일 및 위생: 사용하지 않는 가져오기, 변수 및 매개변수를 삭제합니다. 명시적 액세스 제어를 사용합니다. Swift 가이드라인에 따라 이름을 일관되게 유지합니다. `swift-format`/Xcode 포맷팅 기대치를 통해 코드를 실행하여 생성된 코드가 기존 스타일과 조화를 이루도록 합니다.
스레드를 불러오는 중
깔끔한 읽기 화면을 위해 X에서 원본 트윗을 가져오고 있어요.
보통 몇 초면 완료되니 잠시만 기다려 주세요.