설정에도 디퍼블,컴포지셔널을 적용해보자.
<aside> ✏️ 20221027
원래 MVVM으로 만들었기 때문에, 여기에 DiffableDataSource + CompositionalLayout만 추가했다.
</aside>
final class SettingViewController: BaseViewController {
...
private func bindData() {
viewModel.setSettingList()
viewModel.list.bind { [weak self] settingList in
guard let self = self else { return }
var snapshot = NSDiffableDataSourceSnapshot<Int, SettingList>()
snapshot.appendSections([0])
snapshot.appendItems(settingList, toSection: 0)
self.dataSource.apply(snapshot)
}
}
}
// MARK: - CollectionView
extension SettingViewController {
private func createLayout() -> UICollectionViewLayout {
let configuration = UICollectionViewCompositionalLayoutConfiguration()
let layout = createCompositionalLayout()
layout.configuration = configuration
return layout
}
private func createCompositionalLayout() -> UICollectionViewCompositionalLayout {
return UICollectionViewCompositionalLayout { (sectionIndex, NSCollectionLayoutEnvironment) -> NSCollectionLayoutSection? in
let itemSize = NSCollectionLayoutSize(widthDimension: .fractionalWidth(1),
heightDimension: .fractionalHeight(1))
let item = NSCollectionLayoutItem(layoutSize: itemSize)
let groupSize = NSCollectionLayoutSize(widthDimension: .fractionalWidth(1),
heightDimension: .absolute(65))
let group = NSCollectionLayoutGroup.horizontal(layoutSize: groupSize, subitems: [item])
let headerSize = NSCollectionLayoutSize(
widthDimension: .fractionalWidth(1),
heightDimension: .absolute(118))
let header = NSCollectionLayoutBoundarySupplementaryItem(
layoutSize: headerSize,
elementKind: SettingViewController.sectionHeaderElementKind,
alignment: .top
)
let section = NSCollectionLayoutSection(group: group)
section.boundarySupplementaryItems = [header]
return section
}
}
}