使用枚举管理TableView节以提高清晰度。
作为开发人员,重要的是我们试图使我们的代码尽可能清晰和安全。
将整数分配给各节可能会导致其他开发人员不清楚的代码,而这些开发人员最终可能会在以后阅读和使用我们的代码。 例如,这是一个典型的tableView,我们在其中使用Integers管理节。
典型方法
func numberOfSections(在tableView中:UITableView)-> Int {
返回 2
}
func tableView( _ tableView:UITableView,cellForRowAt indexPath:IndexPath)-> UITableViewCell {
切换 indexPath.section {
案例 0:
返回 UITableViewCell()
情况 1:
返回 UITableViewCell()
默认值 :
返回 UITableViewCell()
}
}
在上面的numberOfSections代码中,很明显我们有2个部分,但是对于开发人员来说,阅读您的代码的这两部分是什么?
在cellForRowe中,我们切换每个部分,并为每个部分返回指定的单元格。 这里有两个问题:
- 我们必须为0和1以外的任何部分提供默认的tableViewCell。
- 对于其他阅读我们代码的开发人员来说,尚不清楚第0节和第1节是什么。
枚举方法
一种新方法是使用枚举来管理每个部分。 例如,说我们有一个tableView,它根据他们的运动显示球队列表。 我们有两项运动:
棒球和足球
因此,我们想将tableView分为2个部分,并在这些部分下列出我们的团队,并相应地配置每个单元格。
步骤1:设定枚举
枚举 Sports:CaseIterable {
棒球,足球
静态 函数 numberOfSections()-> Int {
返回 自身 .allCases.count
}
静态 函数 getSection( _ section:Int)->体育{
返回 自身 .allCases [section]
}
}
我们创建我们的枚举,并使其符合CaseIterable协议。 这将允许我们通过使用类型的allCases属性来访问所有类型案例的集合 。
我们设置了两个功能:
第一个函数numberOfSections返回带有个案数的Integer。 在这里,我们使用协议函数allCases.count来获取枚举中所有案例的计数。
第二个函数getSection接受一个Int,我们再次使用它来自CaseIterable的allCases方法来返回正确的大小写,然后使用方括号将其中的部分放回去,以返回该特定的大小写。
我已经将每个方法设为静态,以便可以在类型本身上调用它而不必初始化枚举。
然后,我们可以如下应用枚举:
func numberOfSections(在tableView中:UITableView)-> Int {
返回 Sports.numberOfSections()
}
func tableView( _ tableView:UITableView,numberOfRowsInSection部分:Int)-> Int {
切换 Sports.getSection(section){
案例。棒球:
返回 1 / *但是行数很多* /
例 .football:
返回 1 / *但是行数很多* /
}
}
func tableView( _ tableView:UITableView,cellForRowAt indexPath:IndexPath)-> UITableViewCell {
切换 Sports.getSection(indexPath.section){
案例。棒球:
返回 UITableViewCell() / *自定义单元格* /
例 .football:
返回 UITableViewCell() / *自定义单元格* /
}
}
如您所见,上面的代码更加清晰。 在numberOfSections中,我们从Sports枚举中返回案例数。
在numberOfRowes和cellForRowe中,我们为每个特定部分打开了Sports枚举,其他开发人员很清楚每个部分是什么,最好的是,我们不再需要在开关中使用默认语句。
基本上可以总结一下,我希望您喜欢这篇小文章,并摘取了一些有价值的技巧,现在可以开始在tableView中实现枚举了。
快乐编码🙂
感谢Mario Boikov给我提供了使用枚举管理部分的原始想法。 您可以在下面的链接中查看他的操作方式。
https://medium.com/@marioboikov/swift-enums-for-managing-uitableview-sections-dfb6ec58f485