From daee1f1b5c739f42ba54a1ebbb9655f5034e315f Mon Sep 17 00:00:00 2001 From: Nicholas Tay Date: Sun, 17 Jul 2022 01:56:43 +1000 Subject: 'weak self' stuff --- LEARNING.md | 2 +- foray/Presenters/PenguinItemPresenter.swift | 3 ++- foray/Scenes/ForayTableViewController.swift | 6 ++++-- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/LEARNING.md b/LEARNING.md index 2c04f65..9259fea 100644 --- a/LEARNING.md +++ b/LEARNING.md @@ -26,6 +26,6 @@ - [x] Presenter - VC shouldn't see PenguinItem, only the one for rendering, e.g. 'PenguinItemModel' - ViewModel struct can be together with Presenter file if simple -- [ ] Background thread +- [x] Background thread - DispatchQueue backgroundThread - Just one place on the presenter to fire back on Main diff --git a/foray/Presenters/PenguinItemPresenter.swift b/foray/Presenters/PenguinItemPresenter.swift index 698b56e..c4553ae 100644 --- a/foray/Presenters/PenguinItemPresenter.swift +++ b/foray/Presenters/PenguinItemPresenter.swift @@ -12,11 +12,12 @@ class PenguinItemPresenter { let fetcher = ForayFetcher() func fetch(receiver: @escaping ([PenguinItemViewModel]) -> ()) { - fetcher.fetch(url: "https://users.windblume.net/~nick/upload/dummy.json") { (apiItems: [PenguinItemModel]) in + fetcher.fetch(url: "https://users.windblume.net/~nick/upload/dummy.json") { [weak self] (apiItems: [PenguinItemModel]) in // Callback to main thread here // There probably is a nicer way to do it, but we will DispatchQueue it back // from the Presenter-level for now (main thread from VC onwards) DispatchQueue.main.async { + guard let self = self else { return } receiver(self.transform(models: apiItems)) } } diff --git a/foray/Scenes/ForayTableViewController.swift b/foray/Scenes/ForayTableViewController.swift index 13b9dea..a29088c 100644 --- a/foray/Scenes/ForayTableViewController.swift +++ b/foray/Scenes/ForayTableViewController.swift @@ -47,7 +47,9 @@ class ForayTableViewController: UITableViewController, Coordinated { } func reloadApiData() { - presenter.fetch(receiver: { (data: [PenguinItemViewModel]) in + presenter.fetch { [weak self] (data: [PenguinItemViewModel]) in + guard let self = self else { return } + let groups = Dictionary(grouping: data) { $0.year } self.sections = groups.map { (key, values) in return YearSection(year: key, items: values) @@ -58,7 +60,7 @@ class ForayTableViewController: UITableViewController, Coordinated { self.tableView.reloadData() self.refreshControl?.endRefreshing() self.coordinator?.hideLoading() - }) + } } // MARK: - Table view data source -- cgit