如何在 swift 中以单例 class 重新加载特定 TableViewController 的表视图
How to reload specific TableViewController's tableview in a singleton class in swift
我有一个带有 tableView 的 AAATableViewController。
我有一个单独的 swift 单例文件。
在单例中,我有一个具有某种逻辑的函数,在这个逻辑中,
我有
DispatchQueue.main.async {
self.tableView.reloadData()
}
但是显示错误,因为单例中没有tableview class。
如何使用委托和协议在单例中重新加载 AAATableViewController 的表视图?
看了一些关于delegate的文章,但是都在viewcontroller之间,搞不懂。
我正在对您的代码结构做出一些假设,但我认为您会想要这样的东西:
protocol ReloadDelegate: AnyObject {
func reloadTable()
}
struct Singleton {
weak var reloadDelegate: ReloadDelegate?
static var shared = Singleton()
func doSomething() {
DispatchQueue.main.async {
self.reloadDelegate?.reloadTable()
}
}
}
class TableViewController: UITableViewController, ReloadDelegate {
override func viewDidLoad() {
super.viewDidLoad()
Singleton.shared.reloadDelegate = self
}
func reloadTable() {
self.tableView.reloadData()
}
}
创建 TableViewController 时,需要将 Singleton 的重新加载委托设置为 TableViewController。现在 Singleton 知道 TableViewController 并可以告诉它重新加载。
我有一个带有 tableView 的 AAATableViewController。
我有一个单独的 swift 单例文件。
在单例中,我有一个具有某种逻辑的函数,在这个逻辑中,
我有
DispatchQueue.main.async {
self.tableView.reloadData()
}
但是显示错误,因为单例中没有tableview class。
如何使用委托和协议在单例中重新加载 AAATableViewController 的表视图?
看了一些关于delegate的文章,但是都在viewcontroller之间,搞不懂。
我正在对您的代码结构做出一些假设,但我认为您会想要这样的东西:
protocol ReloadDelegate: AnyObject {
func reloadTable()
}
struct Singleton {
weak var reloadDelegate: ReloadDelegate?
static var shared = Singleton()
func doSomething() {
DispatchQueue.main.async {
self.reloadDelegate?.reloadTable()
}
}
}
class TableViewController: UITableViewController, ReloadDelegate {
override func viewDidLoad() {
super.viewDidLoad()
Singleton.shared.reloadDelegate = self
}
func reloadTable() {
self.tableView.reloadData()
}
}
创建 TableViewController 时,需要将 Singleton 的重新加载委托设置为 TableViewController。现在 Singleton 知道 TableViewController 并可以告诉它重新加载。