[#166] TodoListView에서 searchable을 버튼화하고 검색 로직을 구현한다#170
Conversation
opficdev
commented
Mar 3, 2026
- closed TodoListView에서 searchable을 버튼화하고 검색 로직을 구현한다 #166
Summary of ChangesHello, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed! 이 Pull Request는 TodoListView에 포괄적인 검색 기능을 도입합니다. 표준 목록 뷰와 새로운 검색 인터페이스 사이를 전환할 수 있도록 UI를 리팩토링했으며, 검색 바와 검색 결과의 동적 표시를 포함합니다. 기본 뷰 모델은 검색 상태를 처리하고, 디바운스된 검색 쿼리를 구현하며, FetchTodosUseCase에서 결과를 가져오도록 업데이트되었습니다. 이 개선 사항은 할 일 목록 내에서 효율적인 검색을 가능하게 하여 사용자 경험을 크게 향상시킵니다. Highlights
Changelog
Activity
Using Gemini Code AssistThe full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips. Invoking Gemini You can request assistance from Gemini at any point by creating a comment using either
Customization To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a Limitations & Feedback Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here. You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension. Footnotes
|
There was a problem hiding this comment.
Code Review
안녕하세요. 이번 PR은 TodoListView의 검색 기능을 개선하여, 기존의 searchable을 버튼으로 대체하고 검색 로직을 구현하는 내용이네요. 전체적인 리팩토링 방향이 좋고, 상태 관리를 ViewModel로 옮겨 잘 분리한 점이 인상적입니다. 몇 가지 수정이 필요한 부분을 코드 리뷰에 남겼습니다. 주요 내용은 다음과 같습니다:
- 검색어 입력 후 모두 지웠을 때 로딩 상태가 초기화되지 않는 버그 수정
ToolbarSpacer의 iOS 가용성 버전 체크 오류 수정- iOS 17 미만 버전에서 검색 취소 시 화면이 정상적으로 전환되지 않는 문제 해결 제안
- 불필요해 보이는
.onAppear코드에 대한 검토 요청
수고 많으셨습니다!
| Image(systemName: "plus") | ||
| } | ||
| } | ||
| if #available(iOS 26.0, *) { |
| } else { | ||
| content.searchable( | ||
| text: searchTextBinding, | ||
| placement: .navigationBarDrawer(displayMode: .always), | ||
| prompt: "\(viewModel.state.kind.localizedName) 검색" | ||
| ) | ||
| } |
There was a problem hiding this comment.
iOS 17 미만 버전에서는 .searchable의 isPresented 파라미터를 사용할 수 없어 사용자가 검색을 취소했을 때 isSearching 상태가 false로 변경되지 않는 문제가 있습니다. 이로 인해 사용자는 검색 화면에서 벗어날 수 없습니다.
이 문제를 해결하려면 @Environment(\.isSearching)을 사용하여 검색 UI의 활성 상태를 감지해야 합니다.
TodoListView에@Environment(\.isSearching) private var isSearchingInEnvironment프로퍼티를 추가합니다.todoSearchContent의searchable수정자 아래에.onChange(of: isSearchingInEnvironment)를 추가하여,isSearchingInEnvironment가false가 될 때viewModel.send(.setIsSearching(false))를 호출하도록 구현해야 합니다.
예시:
.onChange(of: isSearchingInEnvironment) { isSearching in
if !isSearching, viewModel.state.isSearching {
viewModel.send(.setIsSearching(false))
}
}이 수정은 iOS 17 이상에서도 중복 호출을 방지하며 안전하게 동작할 것입니다.
| .onAppear { | ||
| DispatchQueue.main.async { | ||
| viewModel.send(.setIsSearching(true)) | ||
| } | ||
| } |