在 guard 语句中自定义 UITableViewCell 文本

Customize the UITableViewCell text inside a guard statement

我有一个表视图,它从数组的数组中读取信息并显示它。 tableview 具有用于子类别的可折叠单元格。我似乎无法弄清楚如何使我的 TableView 文本符合我创建的原型单元格。我为名为 "autoClaimCell" 的单元格创建了一个 .swift 文件,单元格标识符也是 "autoClaimCell",并且该单元格内的标签称为 "autoClaimCellLabel"。在我做一个守卫声明之前,它工作得很好,因为它允许我在声明的末尾放置 "as! autoClaimCell",然后访问该文件的标签,但现在因为我有了守卫声明,它不会让我把 "as! autoClaimCell" 放在那里的任何地方。

这是我的代码:

    func numberOfSections(in tableView: UITableView) -> Int {
        return tableViewData.count
    }

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        if tableViewData[section].opened == true {
            return tableViewData[section].sectionData.count + 1
        } else {
            return 1
        }
    }


    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
//        let cell = tableView.dequeueReusableCell(withIdentifier: "autoClaimCell", for: indexPath) as! autoClaimCell
//        cell.autoClaimCellLabel?.text = areaCategories[indexPath.row]
//        return cell
        let dataIndex = indexPath.row - 1

        if indexPath.row == 0 {
            guard let cell = tableView.dequeueReusableCell(withIdentifier: "autoClaimCell") else {return UITableViewCell()}
            cell.textLabel?.text = tableViewData[indexPath.section].title
            return cell
        } else {
            //Use different call indentifier if needed
            guard let cell = tableView.dequeueReusableCell(withIdentifier: "autoClaimCell") else {return UITableViewCell()}
            cell.textLabel?.text = tableViewData[indexPath.section].sectionData[dataIndex]
            return cell
        }

    }

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
            if indexPath.row == 0 {

            if tableViewData[indexPath.section].opened == true {
                tableViewData[indexPath.section].opened = false
                let sections = IndexSet.init(integer: indexPath.section)
                tableView.reloadSections(sections, with: .none) // play around with animations
            } else {
                tableViewData[indexPath.section].opened = true
                let sections = IndexSet.init(integer: indexPath.section)
                tableView.reloadSections(sections, with: .none) // play around with animations
            }
        }
    }

此外,如何使展开单元格时显示的列表符合流程中的不同单元格原型?

guard-let 语句中的表达式的计算结果应为可选。用作!将强制解包可选的,这将成功或产生错误但永远不会 return 可选。 只需替换为!作为?

至于符合不同的细胞原型。你需要用你的数据模型来管理它。您已经为索引行 0 设置了不同的条件。您可以为 if expanded 等添加条件。