将两个不同的数组加载到 tableview (Swift)
Posted
技术标签:
【中文标题】将两个不同的数组加载到 tableview (Swift)【英文标题】:Loading two different arrays into tableview (Swift) 【发布时间】:2020-05-17 20:33:32 【问题描述】:我有两个函数,一个获取我的所有帖子,另一个获取我使用 Firebase 提取的访客帖子。我希望将这两个功能结合到我的表格视图中。最好的方法是什么?
var postArray = [Post]() //main array that feeds into tableview
var myArray = [Post]()
var guestArray = [Post]()
var DatabaseConnect = AuthenticationService()
private func fetchAllPosts()
self.DatabaseConnect.fetchMyPosts (myposts) in
self.DatabaseConnect.fetchGuestPosts (posts) in
self.myArray = myposts
self.guestArray = posts
self.postArray = self.myArray + self.guestArray
self.tableView.reloadData()
【问题讨论】:
问题的问题是我们不知道DatabaseConnect 是做什么的,而且问题有点模糊。我们也不知道您使用的是 RTDB 还是 Firestore。听起来您正在从 Firebase 加载数据并填充一个数组,然后从 firebase 读取更多数据并将其附加到数组中。但这并不是很清楚。也不清楚您拥有所有这些类数组变量,但您并没有真正将它们用作类变量。你能澄清问题并解释代码在做什么吗? 【参考方案1】:这里是你如何让它变得更好。
-
不要在不需要的地方使用
self
。例如:self.DatabaseConnect
。
使用 DispatchGroup() 同时调用不相关的 API。
不要使用不必要的变量 myArray
和 guestArray
仅用于附加到主数组为什么不直接附加它。
使用[weak self]
或[unowned self]
同步后台任务。
代码如下:
var postArray = [Post]() //main array that feeds into tableview
var DatabaseConnect = AuthenticationService()
private func fetchAllPosts()
let group = DispatchGroup()
postArray = []
group.enter()
DatabaseConnect.fetchMyPosts [weak self] myposts in
self?.postArray.append(contentsOf: myposts)
group.leave()
group.enter()
DatabaseConnect.fetchGuestPosts [weak self] guestPosts in
self?.postArray.append(contentsOf: guestPosts)
group.leave()
group.notify(queue: .main)
self.tableView.reloadData()
【讨论】:
谢谢!但它似乎不起作用。一旦它击中 group.leave,postArray 似乎被清除了 我进行了一些编辑以添加一些我遗漏的内容。再次检查。 还是不行。当我在第一个 group.leave 之后打印 postArray 时,它会显示出来,但是当我在第二个 group.leave 之后打印 postArray 时,第一个 fetchMyPosts 数组没有显示出来。 尝试使用断点来理解工作流程,并在leave()
之前而不是之后使用打印语句。【参考方案2】:
为什么不直接重新加载表格视图两次:
private func fetchAllPosts()
self.DatabaseConnect.fetchMyPosts (myposts) in
self.postArray.append(myposts)
self.tableView.reloadData()
self.DatabaseConnect.fetchGuestPosts (guestPosts) in
self.postArray.append(guestPosts)
self.tableView.reloadData()
【讨论】:
因为我希望之后能够按日期对帖子进行排序 - 有没有办法做到这一点? 您的原始代码也没有对帖子进行排序。帖子中是否有日期变量?你写过代码来排序吗? 是的,我打算添加 self.postArray.sort $0.postDate > $1.postDate 但不知道将其放在代码中的哪个位置。如果我在第二个 postArray 之后添加排序,则初始加载不会对 myposts 和 guestposts 进行排序,只会对 guestPosts 进行排序。 尝试在每次 reloadData 之前添加两次。它应该是 self.postArray = self.postArray.sort $0.postDate > $1.postDate以上是关于将两个不同的数组加载到 tableview (Swift)的主要内容,如果未能解决你的问题,请参考以下文章
通过 JSON 将图像数组加载到 tableview 图像视图中
将数组数据从 ViewController 传递到 TableView