20220208 iOS 일일 개발 일지
===
###### tags: `develop`
ProductListViewController 내에서 상품 filter에 따라 로직이 진행되도록 해야 한다.
sort 종류
```
lowest_ask - 구매 낮은 순 판매
highest_bid - 가능한 상품 높은 순
premium_price - 발매가에 비해 오른 가격 순
total_sale - 총 판매수
released_date - 발매일 최신 순
```
카테고리 종류
```
의류 : streetwear
스니커즈: sneakers
라이프: life
테크: electronics
악세서리: accessories
가방: premium-bags
```
enum Type으로 정의했지만, Sticky Header에 포함된 부분의 일부는 Category가 아닌 collection에 대한 정보를 제공하고 있다. 해당 부분에 대해서 지금처럼 CollectionView로 사용할 경우, CollectionView의 재사용에 따른 뷰 디자인 변경 문제가 계속 발생할 것으로 예상됨.

TODO: 고민하지말고, scrollView 내부에 stackView로 구현하는 방법으로 바꾸는게 구현상에도 좋을 것 같다는 생각이 든다.
고민은 시간만 늦출뿐...
#### 일단 API 연결 먼저 진행하기.
* Diffable DataSource 적용하기
https://techteto.com/ios-compositional-uicollectionview-with-nsdiffabledatasource-jumps-when-reloading/
모든 UI 처리는 main Thread에서 할 수 있도록 진행
```swift=
self.viewModel.products.bind { [weak self] _ in
DispatchQueue.main.async {
self?.productListView.shopCollectionView.reloadSections(.init(integer: 1))
self?.productListView.indicatorView.stopAnimating()
}
}
// Test를 위해 2초 시간 간격을 두고, 진행해보았음.
DispatchQueue.main.asyncAfter(deadline: .now() + 2) {
self?.productListView.shopCollectionView.reloadSections(.init(integer: 1))
self?.productListView.indicatorView.stopAnimating()
}
```
activity indication view가 정상적으로 작동하는 것을 확인할 수 있었음.

#### 폴더 구조에 대한 생각?
하나의 Scene에 해당하지만, 내부적으로 연결되는 다른 뷰들로 이어진다. 이 뷰 컨트롤러들을 따로 관리해야할지, 같은 폴더 내에서 관리해야할지 명확하게 정의가 어렵다.

하지만, 주된 역할은 ProductListViewController가 담당하고 있고, 나머지 뷰의 경우, ProductListViewController을 위한 부수적인 역할을 담당하고 있다. **지금은 같은 파일에서 관리하는게 더 옳다고 생각된다.**