70. 스파르타 코딩 클럽 - 최종 팀 프로젝트 #12
🎯 Trouble Shooting
[ 1. RxDataSource identity 설정에서 발생했던 Duplicate Error ]
섹션을 하나만 사용하는 TableView에서 identity를 UUID로 설정했을 때
애니메이션이 부자연스럽게 발생한다.
또한 현재위치 버튼을 클릭했을 때, 불필요한 애니메이션이 발생한다.
변경 전
extension StoreInfo: IdentifiableType {
var identity: String { return UUID().uuidString }
}
struct StoreSection {
var identity: String
var items: [StoreInfo]
init(items: [StoreInfo]) {
self.identity = UUID().uuidString
self.items = items
}
}
extension StoreSection: AnimatableSectionModelType {
typealias Item = StoreInfo
// typealias Identity = UUID // Identity 타입을 UUID로 변경
init(original: StoreSection, items: [StoreInfo]) {
self = original
self.items = items
}
변경 후
extension StoreInfo: IdentifiableType {
var identity: String { return displayName } // 고유 식별자로 가게명 사용
}
struct StoreSection {
var identity: String = "main"
var items: [StoreInfo]
}
extension StoreSection: AnimatableSectionModelType {
typealias Item = StoreInfo
init(original: StoreSection, items: [StoreInfo]) {
self = original
self.items = items
}
변경 후 코드에서는 struct StoreSection 부분에서 init을 사용하지 않고,
identity에 직접 String 값을 입력하였다.
그 후 StoreInfo의 identity를 UUID().uuidString 대신 displayName을 사용해서 고유 식별자로 가게명을 사용하였다.
수정 후 테이블 뷰 애니메이션을 보면 불필요한 애니메이션이 사라지고,
정렬 시 옆으로 움직였던 셀들도 위, 아래로만 이동된다.
👨🏻💻 오늘의 작업
[ 1. searchTextBody 검색을 Circle에서 Rectangle로 변경 ]
[Refactor] Detail TableView 리팩토링 · Issue #109 · uddt-ds/EatsOkay
🛠️ Refactor Issue locationRestriction 처리 현위치 버튼 클릭 시 테이블 뷰 재로딩 방지 📝 To-do 가게 검색 로직 변경 (Circle -> Rectangle) RxDataSource identity 재설정
github.com
가게 정보 검색을 원형 검색에서 사각형 검색으로 변경
지도의 모양은 사각형인데 원형으로 가게 정보를 검색하면 지도상 빈 공간이 많이 생기는 문제가 있음.
또한 원형 검색 시 결과 개수가 부족하면 외부 지역의 검색 결과를 가져오기 때문에
사용자가 원하는 검색 결과가 아님.
따라서 가게 정보 검색을 사각형 검색으로 변경
[Refactor] #109 - 가게 검색 로직 변경 by heopill · Pull Request #117 · uddt-ds/EatsOkay
Circle 검색 로직에서 Rectangle 검색 로직으로 변경 📌 관련 이슈 closed: #109 📌 변경 사항 및 이유 가게 검색 로직 변경 현위치 버튼 클릭 시 줌 레벨 14.5로 변경 📌 PR Point Circle 검색 로직을 Rectangle
github.com
[ 2. RxDataSource Identity 재설정 ]
변경 전
extension StoreInfo: IdentifiableType {
var identity: String { return UUID().uuidString } // 고유 식별자로 가게명 사용
}
struct StoreSection {
var identity: String
var items: [StoreInfo]
init(items: [StoreInfo]) {
self.identity = UUID().uuidString
self.items = items
}
}
extension StoreSection: AnimatableSectionModelType {
typealias Item = StoreInfo
// typealias Identity = UUID // Identity 타입을 UUID로 변경
init(original: StoreSection, items: [StoreInfo]) {
self = original
self.items = items
}
변경 후
extension StoreInfo: IdentifiableType {
var identity: String { return displayName } // 고유 식별자로 가게명 사용
}
struct StoreSection {
var identity: String = "main"
var items: [StoreInfo]
}
extension StoreSection: AnimatableSectionModelType {
typealias Item = StoreInfo
init(original: StoreSection, items: [StoreInfo]) {
self = original
self.items = items
}