我的应用程序中有一堆UITableView
基本上做同样的事情,所以我创建了一个名为Presenter
的协议,并使它们都符合它。为简单起见,我决定在所述协议的扩展中实现UITableViewDelegate
和UITableViewDataSource
方法。但是,我偶然发现了多个错误和警告,如下所示:
在协议中添加@objc
没有帮助。
现在我知道创建UITableView
的子类可能会更容易,但我想知道是否有一个无痛的解决方案来解决这个问题。作为刚认识Swift
的人,我试图尽可能多地实施协议。
以下是代码:
protocol Presenter {
var viewer: Viewer { get }
}
extension Presenter where Self: UITableViewDelegate {
func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
return viewer.header
}
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return viewer.height
}
}
extension Presenter where Self: UITableViewDataSource {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return viewer.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: GenericCell.identifier, for: indexPath) as! GenericCell
cell.content = viewer.viewable(at: indexPath.row)
return cell
}
}