CollectionModelAnimation 0.0.2

CollectionModelAnimation 0.0.2

Denis Poifol 维护。



 
依赖
CollectionModelCore~> 0
DifferenceKit= 1.1.5
 

CollectionModel

CI Version License Platform

这个Pod的目标是提供一个数据结构,以表示collectionView/tableView显示的内容。它使得可以从视图的dataSource中提取任何业务逻辑到负责生成其viewModel的代码部分。这有助于在您的应用程序中执行更好的关注点分离,并使dataSource易于维护。

示例应用程序

为了运行示例项目,请先克隆仓库,然后在示例目录中运行bundle install & bundle exec pod install

使用

所有内容均在Xcode中有文档说明。

TableViewViewModel

TableViewViewModel是一个结构体,尽可能地代表UITableView的结构。它是两个参数的泛型,分别是HeaderFooterViewModelCellViewModel,这两个参数都很直观,应该代表用于配置tableView单元格、头部或尾部的模型。

该结构体主要是一个数组TableViewSectionViewModel的包装,而TableViewSectionViewModel是一个结构体,代表着UITableView中的一个分区。

TableViewSectionViewModel依赖于一个cellViewModels数组以及两个可选的头部和尾部属性。

如果你只使用一种类型的单元格,那么基于CollectionViewModel的实现的tableViewDataSource相当简单。

class SimpleTableViewDataSource: NSObject,
    UITableViewDataSource {

    typealias ViewModel = TableViewModel<Never, ATableViewCellModel>

    var viewModel = ViewModel()

    func numberOfSections(in tableView: UITableView) -> Int {
        viewModel.sections.count
    }

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        viewModel[section].cells.count
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell: ATableViewCell = tableView.dequeueCell(at: indexPath)
        cell.configure(with: viewModel[indexPath])
        return cell
    }
}

如果您必须使用多种类型的单元格,则应创建一个用于单元格类型的枚举。

enum MultipleCellTypesTableViewCellModel {
    case a(ATableViewCellModel)
    case b(BTableViewCellModel)
}

这只需要更改你的tableView(_:cellForRowAt:)实现,以管理两种单元格类型的情况。

有关更详细的信息,请参阅示例应用。

CollectionViewModel

CollectionViewModel是一个结构体,尽可能准确地表示了UICollectionView的结构。它是两个泛型参数的泛型结构体:SupplementaryViewModelCellViewModel,这两个参数都是显而易见的,它们应该代表用于配置collectionView单元格的模型或可能是一个头部、尾部或自定义补充视图的补充视图模型。

该结构体主要是一个数组CollectionSectionViewModel的包装,而CollectionSectionViewModel是一个结构体,代表着UICollectionView中的一个分区。

CollectionSectionViewModel依赖于一个单元格视图模型数组和一个字典,该字典存储了补充视图模型,其中键是SupplementaryViewSectionKey,还有一个索引和补充视图的类型。分区的头部和尾部存储在其自己的变量中,而不是在字典中。

如果你只使用一种类型的单元格,那么基于CollectionViewModel实现的collectionViewDataSource相当简单。

class SimpleCollectionViewDataSource: NSObject,
    UICollectionViewDataSource {
	
	typealias ViewModel = CollectionViewModel<Never, CollectionViewCellModel>

    var viewModel = ViewModel()

    func numberOfSections(in collectionView: UICollectionView) -> Int {
        viewModel.sections.count
    }

    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        viewModel[section].cells.count
    }

    func collectionView(_ collectionView: UICollectionView,
                        cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        let cell: ACollectionViewCell = collectionView.dequeueCell(at: indexPath)
        cell.configure(with: viewModel.cellViewModel(at: indexPath))
        return cell
    }
}

如果您必须使用多种类型的单元格,则应创建一个用于单元格类型的枚举。

enum MultipleCellTypesCollectionViewCellModel {
    case a(ACollectionViewCellModel)
    case b(BCollectionViewCellModel)
}

这只需要更改你的collectionView(_:cellForItemAt:)实现,以管理两种单元格类型的情况。

需求

使用此Pod没有技术要求,只是使用Swift。

安装

CollectionModel可以通过CocoaPods获得。要安装它,请简单地将以下行添加到Podfile中:

pod 'CollectionModel'

作者

Denis Poifol[email protected]

许可证

CollectionModel 在 MIT 许可下可用。请参阅 LICENSE 文件获取更多信息。