首页 > 解决方案 > Swift:如何为其委托创建一个具有泛型类型的自定义覆盖 UITableView?

问题描述

我想创建一个 UITableView,并使用这个新的委托。基本上:

class GenericTableView: UITableView {    
    weak var customDelegate: GenericTableViewDelegate?
}

protocol GenericTableViewDelegate : NSObjectProtocol {
    func genericTableView(_ genericTableView: GenericTableView, numberOfRowsInSection section: Int) -> Int
}

但现在我想添加一个与此委托关联的泛型类型:

protocol GenericTableViewDelegate : NSObjectProtocol {
    associatedtype T   
    func cellFor(object: T) -> UITableViewCell    
}

这个错误出现在我定义customDelegate的地方:

协议 'GenericTableViewDelegate' 只能用作通用约束,因为它具有 Self 或关联的类型要求

我理解这个问题,但我不知道该怎么做。

谢谢您的帮助。

标签: iosswiftprotocolsswift-protocols

解决方案


正如错误所述:

协议 'GenericTableViewDelegate'只能用作通用约束,因为它具有 Self 或关联的类型要求。

所以,让我们这样做:

class GenericTableView<Delegate: GenericTableViewDelegate>: UITableView {
    weak var customDelegate: Delegate?
}

推荐阅读