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의 재사용에 따른 뷰 디자인 변경 문제가 계속 발생할 것으로 예상됨. ![](https://i.imgur.com/S7tRKeE.png) 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가 정상적으로 작동하는 것을 확인할 수 있었음. ![](https://i.imgur.com/WRkWr9X.png) #### 폴더 구조에 대한 생각? 하나의 Scene에 해당하지만, 내부적으로 연결되는 다른 뷰들로 이어진다. 이 뷰 컨트롤러들을 따로 관리해야할지, 같은 폴더 내에서 관리해야할지 명확하게 정의가 어렵다. ![](https://i.imgur.com/iZl5NBQ.png) 하지만, 주된 역할은 ProductListViewController가 담당하고 있고, 나머지 뷰의 경우, ProductListViewController을 위한 부수적인 역할을 담당하고 있다. **지금은 같은 파일에서 관리하는게 더 옳다고 생각된다.**