如何使用String创建类引用

时间:2016-12-30 09:18:18

标签: ios iphone swift swift3

所以这就是我面临的问题。 看看

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条件或切换案例。

提前感谢。

2 个答案:

答案 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()