gpt4 book ai didi

arrays - 某些数据更改后如何刷新 TableView?

转载 作者:行者123 更新时间:2023-11-28 12:22:03 25 4
gpt4 key购买 nike

我只想更改一个名为 Network 的类中的用户列表。而且我不明白如何在 userList 更改后更新 TableView。我将在下面的代码中向您展示一个示例和详细问题。

// Network.swift
class Network {
var userList: [User] = []

// Next functions may change userList array
// For example, the data came from the server, and update the userList with new data
}

// App delegate
class AppDelegate: UIResponder, UIApplicationDelegate {
var network: Network = Network()

..
}

// File TableViewController.swift
class TableViewController: UITableViewController {

var userList: [User] = [] // Here I want to have a full copy of the array from Network class

override func viewDidLoad() {
super.viewDidLoad()

let appDelegate = UIApplication.shared.delegate as! AppDelegate
self.userList = appDelegate.network.userList // Just copy an array
// And I want that after each update appDelegate.network.userList I updated the table, how to do it better?

self.tableView.reloadData()
}
}

最佳答案

正如@JDM 在评论中提到的,您的架构一团糟。
尝试使用协议(protocol)进行此委托(delegate):

// Network.swift
protocol UsersUpdatedProtocol {
func usersListUpdated(list: [User])
}
class Network {
var userList: [User] = [] {
didSet {
delegate?.usersListUpdated(list: userList)
}
}
var delegate: UsersUpdatedProtocol?
init(delegate d: UsersUpdatedProtocol) {
super.init()
delegate = d
}
}

// File TableViewController.swift
class TableViewController: UITableViewController, UsersUpdatedProtocol {
var userList: [User] = []

override func viewDidLoad() {
super.viewDidLoad()
let _ = Network(delegate: self)
}
func usersListUpdated(list: [User]) {
self.userList = list
self.tableView.reloadData()
}
}

关于arrays - 某些数据更改后如何刷新 TableView?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44505446/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com