-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Description
. SearchViewController.swift
- 사용자 입력 처리 및 API 호출 트리거
searchController.searchBar.rx.searchButtonClicked
.withLatestFrom(searchController.searchBar.rx.text.orEmpty)
.filter { !$0.isEmpty }
.map { Reactor.Action.search($0) }
.bind(to: reactor.action)
.disposed(by: disposeBag)- 검색 버튼 탭 이벤트 감지
- 검색어 텍스트와 결합하여 빈 문자열 필터링
- ReactorKit의 search 액션으로 변환하여 Reactor로 전달
- 검색 액션에 대한 비즈니스 로직 처리
case .search(let query):
guard !currentState.isLoading else { return Observable.empty() }
let request = CardsRequest(query: query, page: 1)
return Observable.concat([
Observable.just(Mutation.setLoading(true)),
self.pokemonRepository.fetchCards(request: request)
.map { result in Mutation.setSearchResults(result) }
.catchError { Observable.just(Mutation.setError($0)) },
Observable.just(Mutation.setLoading(false))
])중복 요청 방지를 위한 로딩 상태 검사
검색어와 페이지 정보를 포함한 CardsRequest 생성
pokemonRepository를 통해 API 호출 수행
검색 결과를 setSearchResults 뮤테이션으로 상태 업데이트
에러 발생 시 setError 뮤테이션으로 상태 업데이트
로딩 상태 관리를 위한 setLoading 뮤테이션 사용
- 검색 결과 표시 및 상태 변화 구독
reactor.state.map { $0.searchResult }
.distinctUntilChanged()
.bind(to: tableView.rx.items(cellIdentifier: "PokemonCardTableViewCell", cellType: PokemonCardTableViewCell.self)) { _, item, cell in
cell.configure(with: item)
}
.disposed(by: disposeBag)Reactor의 상태에서 searchResult 추출
중복 이벤트 제거를 위해 distinctUntilChanged 연산자 사용
테이블 뷰의 items 속성에 바인딩하여 검색 결과 표시
셀 구성을 위한 configure 메서드 호출
- 역할: 검색 화면의 UI를 구성하고 사용자 인터랙션을 처리하는 뷰 컨트롤러입니다.
- 주요 기능:
- 검색어 입력을 받아
SearchReactor로 전달합니다. - 검색 결과를 테이블 뷰로 표시합니다.
- 무한 스크롤을 통해 추가 검색 결과를 로드합니다.
- 필터 옵션을 선택하여 검색 결과를 필터링합니다.
- 검색어 입력을 받아
- 데이터 흐름:
- 사용자가 검색어를 입력하면
updateSearchQuery액션을 통해SearchReactor로 전달됩니다. - 검색 버튼을 탭하면
search액션을 통해SearchReactor에 검색을 요청합니다. SearchReactor로부터 받은 상태 변화를 구독하여 UI를 업데이트합니다.
- 사용자가 검색어를 입력하면
2. SearchReactor.swift
- 역할: 검색 화면의 비즈니스 로직을 담당하는 리액터입니다.
- 주요 기능:
- 검색어 업데이트 및 검색 수행
- 검색 결과 상태 관리
- 무한 스크롤 처리
- 필터 옵션 적용
- 데이터 흐름:
updateSearchQuery액션을 받아 현재 검색어를 업데이트합니다.search액션을 받아PokemonRepository를 통해 API 호출을 수행.- 검색 결과를 상태에 저장하고 뷰로 전달.
- 무한 스크롤 액션을 받아 추가 검색 결과를 로드.
- 필터 옵션 선택 시 해당 옵션을 적용하여 검색 결과를 필터링.
3. PokemonRepository.swift
- 역할: 포켓몬 데이터를 가져오기 위한 리포지토리입니다.
- 주요 기능:
- 포켓몬 카드 검색 API 호출
- 데이터 흐름:
SearchReactor로부터 검색 요청을 받아PokemonTarget을 통해 API 호출을 수행.- API 응답 데이터를 가공하여
SearchReactor로 전달.
5. CardsRequest.swift
- 역할: 포켓몬 카드 검색 요청 파라미터를 캡슐화하는 구조체입니다.
- 주요 기능:
- 검색어, 페이지, 페이지 크기 등의 요청 파라미터를 저장합니다.
- 요청 파라미터를 딕셔너리 형태로 변환하는 기능을 제공합니다.
- 데이터 흐름:
PokemonRepository에서CardsRequest를 사용하여 요청 파라미터를 설정합니다.
데이터 흐름 정리
- 사용자 입력(
SearchViewController) - 액션 전달(
SearchReactor) - API 호출(
PokemonRepository) - 응답 데이터 가공(
PokemonRepository) - 상태 업데이트(
SearchReactor) - UI 업데이트(
SearchViewController)
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels