所以这就是我面临的问题。 看看
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
if indexPath.row == 0 {
let cell = tableView.dequeueReusableCell(withIdentifier: "ExpenseTableViewCell_Title") as! ExpenseTableViewCell_Title
return cell
} else {
let cell = tableView.dequeueReusableCell(withIdentifier: "ExpenseTableViewCell_SaveCanel") as! ExpenseTableViewCell_SaveCanel
return cell
}
}
我想要做的是,使用单元格标识符字符串作为单元格类型。(即ExpenseTableViewCell_Title,ExpenseTableViewCell_SaveCanel)。
我有小区标识符数组。
var TableCell:[ExpenseCellType] = [.ExpenseTableViewCell_Title, .ExpenseTableViewCell_SaveCanel]
现在我只有两种类型的细胞。但这个数字会很高。 而且我不想使用if / else条件或切换案例。
提前感谢。
答案 0 :(得分:3)
可以通过扩展程序缩短时间:
extension UITableView {
func dequeueReusable<T>(type: T.Type, index: IndexPath) -> T {
return self.dequeueReusableCell(withIdentifier: String(describing: T.self), for: index) as! T
}
}
像这样使用它,将返回ExpenseTableViewCell_Title
类型单元格:
let cell = tableView.dequeueReusable(type: ExpenseTableViewCell_Title.self, index: indexPath)
只需将您的班级存储在[ExpenseTableViewCell_Title.self, ExpenseTableViewCell_SaveCanel.self]
等数组中,然后将其传递给此函数
答案 1 :(得分:2)
您可以使用函数NSClassfromString
但是您需要命名空间来从String获取类。
我在这里创建了一个例子来使用它。 例如:
func getClassFromString(_ className: String) -> AnyClass! {
let namespace = Bundle.main.infoDictionary!["CFBundleExecutable"] as! String;
let cls: AnyClass = NSClassFromString("\(namespace).\(className)")!;
return cls;
}
class customcell: UITableViewCell {
}
let requiredclass = getClassFromString("customcell") as! UITableViewCell.Type
let cellInstance = requiredclass.init()