摘要
CellDataCoupler 是一个用 Swift 编写的框架,它帮助您以结构化方式管理 tableView,它将模型绑定到单元格并向表格源提供它们。有了 CellDataCoupler,您可以简化开发过程,使代码更易于阅读,并避免不良的 tableView 实践。
要求
- iOS 8.0+
- Swift 4.0+
安装
CocoaPods
要将 CellDataCoupler 集成到您的项目中,请在您的 Podfile 中指定它。
pod 'CellDataCoupler'
基本用法
TableView
CellDataCoupler负责处理UITableViewDataSource和UITableViewDelegate协议中的一部分工作。例如,它管理行/部分的数量并提供表格中的单元格。如有必要,它还会创建和管理头部和尾部视图。由于CellDataCoupler对子类友好,您可以子类化以配置高度和预估高度。因此,它可以帮助您节省设置TableView相关工作的错误时间。
var @IBOutlet weak var tableview: UITableView!
var tableviewSource: BaseTableSource?
func setupTableviewSource() {
tableviewSource = BaseTableSource(with: tableview)
}
单元格
在CellDataCoupler中使用的单元格与UITableViewCell不同,因为CellDataCoupler将单个单元格的逻辑放在单元格中,而不是使用TableView代理方法。这使得代码不仅更易读,而且更容易查找与单元格相关的错误。您可以将与单元格相关的任何逻辑放在设置函数中。
struct PersonCellData = {
var name: String
var age: Int
}
class PersonCell: BaseTableViewCell<PersonCellData> {
@IBOutlet weak var myLabel: UILabel!
override func setup() {
myLabel.text = "\(info?.name ?? "") \(info?.age ?? 0)"
}
}
耦合器
将耦合器视为TableView和单元格之间的桥梁。您可以将单元格的类型和数据传递给CellCoupler。如果需要,您还可以传递处理单元格选择的代码块。CellDataCoupler的优点是它为您处理不同类型的单元格。有关详细信息,请查看高级用法。然后,调用带有耦合器的设置函数,以在TableView中填充数据的最后一步。
var couplers = [BaseCellCoupler]()
let personCoupler = CellCoupler(PersonCell.self, PersonCellData(name: "Mary", age: 28), didSelect: nil)
couplers.append(personCoupler)
tableviewSource?.set(couplers: couplers)
高级用法
处理不同类型的单元格
CellDataCoupler帮助您处理不同类型的单元格。在处理某一类型单元格时,您可以简单地为不同类型的单元格和数据创建耦合器,并将它们添加到耦合器中。然后,只需使用耦合器调用set函数。
var couplers = [BaseCellCoupler]()
let personCoupler = CellCoupler(PersonCell.self, PersonCellData(name: "Smith", age: 34), didSelect: nil)
couplers.append(personCoupler)
let customerCoupler = CellCoupler(CustomerCell.self, CustomerCellData(customerName: "Mitch", age: 27), didSelect: nil)
couplers.append(customerCoupler)
tableviewSource?.set(couplers: couplers)
处理章节
使用CellDataCoupler,您可以轻松地处理静态章节,如标题或页脚,以及动态章节,如表视图内容主体部分。在处理不同类型的单元格时,只需调用set函数,但这次是针对章节。
let titleCouper = CellCoupler(TitleLabelCell, TitleCellData(title: "title"), didSelect: nil)
let peopleCouplers = [BaseCellCoupler]()
for person in people {
let personCoupler = CellCoupler(PersonCell.self, PersonCellData(name: "Pio", age: 17), didSelect: nil)
peopleCouplers.append(personCoupler)
}
tableviewSource?.set(sections: [CellCouplerSection(header: titleCoupler, couplers: peopleCouplers)])
处理大量数据
当您需要处理大量数据但希望保持性能时,可以使用CouplerFactory。表视图仅根据设备大小显示少量项目。如果用户向下滚动以获取更多项目,CouplerFactory将使用缓存为表视图提供下一批项目。
您无需手动创建和添加大量数据的耦合器,只需创建具有指定耦合器数量和耦合器获取(负责索引数据项)的CouplerFactory即可。
let sectionHeader = CellCoupler(TitleLabelCell, TitleCellData(title: "title"), didSelect: nil)
let itmes = [item1, item2, ..., item100]
let couplerFactory = CouplerFactory(count: itmes.count, couplerFetch: { (index) -> BaseCellCoupler in
return CellCoupler(itemCell.self, items[index])
})
let section = CellCouplerSection(header: sectionHeader, factory: couplerFactory)
tableviewSource?.set(sections: section)
示例项目
示例项目展示了如何正确使用CellDataCoupler。它不仅展示了常规工作流程,还展示了如何为更多功能对TableSource类进行子类化。要运行示例项目,请将其克隆。先打开pod install
,不要忘了哦。
作者
亚历克斯·拉尔森,[email protected]
许可协议
CellDataCoupler许可证为MIT。有关更多信息,请参阅LICENSE文件。