You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 19:45:41