我认为我错过了Swift的一些基本功能,但却无法找到其他人在做我尝试的事情的例子:
背景
我有一个带有2个原型单元的UITableView,具有不同的标识,不同的功能(标签,图像等)和不同的类。
我希望cellForRowAt函数返回不同类型和类的单元格,具体取决于包含表数据的数组中的内容。该数组填充了struct实例,其中一个特性标识了我想要表示数据的单元格类型。
代码尝试
这不是逐字复制/粘贴,但原理是相同的
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
switch dataArray[indexPath.item].typeOfData {
case "Type1":
let cell = tableView.dequeueReusableCell(withIdentifier: "type1ReuseIdentifier", for: indexPath) as! type1Cell
//Set up the cell contents
return cell
case "Type2":
let cell = tableView.dequeueReusableCell(withIdentifier: "type2ReuseIdentifier", for: indexPath) as! type2Cell
//Set up the cell contents
return cell
default
let cell = tableView.dequeueReusableCell(withIdentifier: "separatorIdentifier", for: indexPath) as! separatorCell
//Set up the cell contents
return cell
}
}
问题是这不起作用,Swift要我在switch语句之外声明并返回单元格,但是我不能这样做,因为单元格类型的声明取决于数据的类型我想创建(因为需要使用typexCell来访问自定义单元格的组件)。
我错过了什么/做错了什么?
答案 0 :(得分:1)
就这样做:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let typeSection = CellType(rawValue: indexPath.row)!
switch typeSection {
case .CenterTitleCell:
return getCenterTitleCell(tableView, indexPath)
case .CenterDescriptionCell:
return getCenterDescriptionCell(tableView, indexPath)
case .CenterImageCell:
return getImageCell(tableView, indexPath)
case .FooterTitleCell:
return getFooterViewCell(tableView, indexPath)
}
}
使用另一种方法返回Cell Type
func getCenterTitleCell (_ tableView: UITableView, _ indexPath:IndexPath) -> CenterTitleTableViewCell {
let cell:CenterTitleTableViewCell = tableView.dequeueReusableCell(withIdentifier: String(describing: CenterTitleTableViewCell.self),
for: indexPath) as! CenterTitleTableViewCell
cell.selectionStyle = .none
return cell
}