【发布时间】:2016-04-29 11:24:13
【问题描述】:
我有多个 TableViewController 类继承自基本 TableViewController 类,如下所示:
class BasicTableViewController: UITableViewController {
}
class SpecificTableViewController: BasicTableViewController {
}
class AnotherSpecificTableViewController: BasicTableViewController {
}
然后我创建了一个非常简单的协议来为特定的视图控制器类添加刷新功能,如下所示:
@objc
protocol Refreshable {
func refresh()
}
我的特定视图控制器类可以像这样实现协议:
class SpecificTableViewController: BasicTableViewController, Refreshable {
func refresh() {
getSomeDataFromServer()
}
}
现在的问题是:从本身不符合Refreshable 协议的BasicTableViewController 调用刷新方法的正确方法是什么?现在我正在做这样的事情(不确定是否可行):
class BasicTableViewController: UITableViewController {
override func viewDidLoad() {
super.viewDidLoad()
if let _ = self as? Refreshable {
let refreshControl = UIRefreshControl()
refreshControl.addTarget(self, action: #selector(Refreshable.refresh), forControlEvents: .ValueChanged)
self.refreshControl = refreshControl
}
}
}
一开始我没有用@objc 标记协议,而是尝试像这样构建选择器:#selector(refresh)。但这没有用。希望得到一些澄清。 :)
提前致谢!
【问题讨论】:
-
为什么不想让
BasicTableViewController符合Refreshable协议? -
看看我对 riik 解决方案的评论。如果视图控制器采用
Refreshable协议,我只想实现刷新控制。如果您有更好的方法进行检查,欢迎您提出。 :) 这就是我要的...
标签: ios swift inheritance protocols