将两个不同的数组加载到表视图中 (Swift)

Loading two different arrays into tableview (Swift)

我有两个函数,一个用于获取我的所有帖子,另一个用于获取我使用 Firebase 提取的访客帖子。我希望将这两个功能组合到我的 tableview 中。执行此操作的最佳方法是什么?

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()
        }
    }
}

以下是如何让它变得更好。

  1. 不要在不需要的地方使用 self。例如:self.DatabaseConnect.
  2. 对不相关的同时 API 调用使用 DispatchGroup()。
  3. 不要使用不必要的变量 myArrayguestArray 仅用于附加到主数组为什么不直接附加它。
  4. 使用 [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()
    }
}

为什么不重新加载 tableview 两次:

   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()
        }
    }