如何在UITableView的numberOfRowsInSection中判断.item是否为PostType.survey?
解决UITableView numberOfRowsInSection中PostType.survey判断失效问题
你当前的numberOfRowsInSection实现里,用于判断.item section是否对应PostType.survey的代码完全无效,问题出在if case item = PostType.survey.rawValue这个语句——item是Section枚举的case,和PostType的rawValue没有任何关联,这样的比较逻辑根本无法检测当前内容的类型。
你的原代码
numberOfRowsInSection实现:
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { switch Section(rawValue: section)! { case .slider: return parentVC.selectedCommunity == nil ? 1 : 0 case .header: return 1 case .item: if case item = PostType.survey.rawValue { let sectionItems = parentVC.surveys var numberOfRows: Int = sectionItems.count for rowItems in sectionItems { numberOfRows += rowItems.surveyAnswers!.count } return numberOfRows } else { return cellTypes.count } } }
枚举定义:
enum Section: Int { case slider case header case item static var numberOfSections: Int { return Section.item.rawValue + 1 } var reuseIdentifier: String { switch self { case .slider: return NewsFeedSliderTableViewCell.reuseIdentifier case .header: return NewsFeedPostHeaderTableViewCell.reuseIdentifier case .item: return NewsfeedTableViewCell.reuseIdentifier } } } enum PostType: Int { case post = 0 case question = 1 case survey = 2 }
修正后的实现逻辑
要正确判断.item section对应的内容是否为PostType.survey,你需要拿到当前展示内容对应的PostType枚举值(比如从parentVC的数据源或当前选中的post对象中获取),然后直接和.survey做比较。
修正后的代码示例:
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { switch Section(rawValue: section)! { case .slider: return parentVC.selectedCommunity == nil ? 1 : 0 case .header: return 1 case .item: // 假设parentVC中存储了当前的PostType,比如currentPostType if parentVC.currentPostType == .survey { let sectionItems = parentVC.surveys var numberOfRows = sectionItems.count // 替换强制解包为可选绑定,避免崩溃 for survey in sectionItems { numberOfRows += survey.surveyAnswers?.count ?? 0 } return numberOfRows } else { return cellTypes.count } } }
补充说明
- 如果你的PostType是依附于具体的Post对象(比如展示某一条post),可以换成从数据源中获取对应对象的type属性,例如:
if parentVC.currentPost?.type == .survey { // 处理survey逻辑 } - 原代码中
surveyAnswers!的强制解包存在崩溃风险,建议用surveyAnswers?.count ?? 0来安全获取数量。
内容的提问来源于stack exchange,提问作者Mert Köksal
相关产品推荐
相关产品推荐

