使用泛型设置cellDelegate

时间:2017-02-22 10:10:05

标签: ios swift uitableview generics swift3

大家好,你好吗?希望你们好。

我需要一点帮助,我提前感谢你。

我的自定义单元格中有一个自定义委托,如下所示:

protocol customTableViewCellDelegate: NSObjectProtocol {
    func buttonPressed(customCell: customTableViewCell)
} 

我有一个扩展来在表格视图中设置单元格,如下所示:

extension UITableView {
    func layoutTemplateCell<T: UIViewController>(indexPath: IndexPath, viewController: T.Type) -> UITableViewCell {
            let cell = UITableViewCell()

                switch template {
                case customCell:
                    let cell = self.dequeueReusableCell(withIdentifier: customTableViewCell.identifier) as! customTableViewCell
                    cell.delegate = viewController.self
                    return cell
                default:
                    break
                }
            return cell
        }
}

但我在cell.delegate中收到错误“无法指定类型T.type的值来键入customTableViewCellDelegate?”

我不知道如何正确使用通用,我不知道如何修复此错误。

我希望你们能帮助我。感谢您抽出时间阅读本文并度过美好的一天。

1 个答案:

答案 0 :(得分:2)

您正在尝试将视图控制器的类分配给delegate属性,而不是视图控制器实例。你想要的是:

cell.delegate = viewController

我不明白你为什么要使用泛型。你可以使用协议:

protocol CustomTableViewCellDelegate: NSObjectProtocol {
    func buttonPressed(customCell: UITableViewCell)
}

extension UITableView {
    func layoutTemplateCell(indexPath: IndexPath, viewController: CustomTableViewCellDelegate) -> UITableViewCell {
            let cell = UITableViewCell()

                switch template {
                case customCell:
                    let cell = self.dequeueReusableCell(withIdentifier: customTableViewCell.identifier) as! CustomTableViewCell
                    cell.delegate = viewController
                    return cell
                default:
                    break
                }
            return cell
        }
}