gpt4 book ai didi

swift - 当数组的内容是不同类型时,如何填充多个 tableview 部分?

转载 作者:可可西里 更新时间:2023-11-01 00:34:21 26 4
gpt4 key购买 nike

我遇到了一点多态性问题。我有三个数组 aList、bList 和 cList,它们包含不同类型的设备“A”、“B”、“C”。

我想用 aList、bList、cList 的 3 个部分填充一个 tableviewcontroller。但是当我到达时我有点挣扎:

 override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell

我遇到的问题是,理想情况下我会在一个数组中包含三个数组,例如。 section = [aList, bList, cList).

在我的单例中,“A”、“B”、“C”是结构体,代表一种设备,所以我将它们更改为类并从“设备”父类(super class)中继承它们,然后尝试创建一个数组父类(super class)“设备”,但这也不起作用。

建议会很好。

class EquipmentListController: UITableViewController {

var model = SingletonModel.sharedInstance

var aList:[SingletonModel.A] = []
var bList:[SingletonModel.B] = []
var cList:[SingletonModel.C] = []

override func viewDidLoad() {
super.viewDidLoad()

}

override func viewWillAppear(_ animated: Bool) {

super.viewWillAppear(animated)
aList = model.AList
bList = model.BList
cList = model.CList
sections.append(aList)
sections.append(bList)
sections.append(cList)

}

override func numberOfSections(in tableView: UITableView) -> Int {

return 3
}

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

switch section{
case 1:
self.tableView.rowHeight = 70
return aList.count
case 2:
return bList.count
case 3:
return cList.count

default:
return 0
}

}

我的问题在下面这行 let equipment: SingletonModel.A (or B or C) - 基本上我有三个独立的数组,每个都是不同的类型。

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
{

guard let cell = tableView.dequeueReusableCell(withIdentifier: "equipmentcell", for: indexPath) as? EquipmentCell else
{

}

let equipment: SingletonModel.A (or B or C) = changeDataSource(indexPath: indexPath as NSIndexPath)

cell.equipmentTitle.text = equipment.equipmentName
cell.accessoryType = .disclosureIndicator
return cell
}

func changeDataSource(indexPath: NSIndexPath) -> SingletonModel.A, B or C
{
var equipment:SingletonModel.A (B or C)
equipment = A, B or C [indexPath.row]
return equipment
}

func tableView(tableView: UITableView!, titleForHeaderInSection section: Int) -> String!
{
switch section
{
case 1:
return "A"
case 2:
return "B"
case 3:
return "C"
default:
return nil
}
}

override func tableView(_ tableView: UITableView,
heightForHeaderInSection section: Int) -> CGFloat
{
return 40
}

}

谢谢

最佳答案

首先您需要修复章节编号:章节从零开始编号,而不是从一开始:

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
switch section {
case 0:
return aList.count
case 1:
return bList.count
case 2:
return cList.count
default:
return -1 // Fail fast
}
}

接下来,更改设置行高的方式:

override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
// Rows in section 0 are taller
return indexPath.section == 0 ? 70.0 : 50.0;
}

现在您可以使用ABC 设置您的手机:

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
guard let cell = tableView.dequeueReusableCell(withIdentifier: "equipmentcell", for: indexPath) as? EquipmentCell else
{
return nil
}
var equipment : BaseOfABC = nil
switch indexPath.section {
case 0:
equipment = SingletonModel.A
case 1:
equipment = SingletonModel.B
case 2:
equipment = SingletonModel.C
default:
assert(indexPath.section < 3, "Unknown section")
}
cell.equipmentTitle.text = equipment.equipmentName
cell.accessoryType = .disclosureIndicator
return cell
}

关于swift - 当数组的内容是不同类型时,如何填充多个 tableview 部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46545156/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com