Передача данных между UITableView и пользовательскими ячейками и их хранение - PullRequest
0 голосов
/ 22 сентября 2018

Я работаю над учебным проектом, в котором приложение для iOS печатает список / публикаций с jsonplaceholder.typicode.com, и когда пользователь выбирает один, загружается контроллер подробного представления и отображается дополнительная информация об этом сообщении (автори количество комментариев).Последние два приходят с разных конечных точек на первый.

На данный момент первый вызов API выполняется при загрузке контроллера основного вида для получения списка сообщений.Текст сообщения пропускается через последовательность действий, когда пользователь нажимает на ячейку, так как эта информация должна отображаться в подробном контроллере представления, а также userId и Id для этого сообщения (для следующих вызовов API).В детализированном контроллере представления выполняются два дополнительных вызова API (по одному для каждой необходимой конечной точки), и поэтому все данные готовы.

На данный момент эти данные хранятся в массиве.String, String, Int (автор, тело и количество комментариев).

Как лучше представить эти данные, поскольку я понимаю, что это очень хакерский способ сделать это?Контроллер основного представления / данные записи содержатся в одной структуре Post, но я не уверен, как объединить три части отдельных данных в одну структуру для подробного контроллера представления.

См. Улучшение функций Swift API GET для API-вызовов / структур

var userId = 0
var id = 0
var sectionCount = 0
var postDetails = ["", "", ""]

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)

    populateDetailedTableView()
}

func populateDetailedTableView() {
    APIManager.sharedInstance.getAuthor(for: userId) { (result) in
        switch result {
        case .success(let author):
            self.postDetails[0] = author
        case .failure(let error):
           print(error.localizedDescription)
        }
    }
    APIManager.sharedInstance.getComments(for: id) { (result) in
        switch result {
        case .success(let comments):
            self.postDetails[2] = "View all \(comments.count) comments"
            self.sectionCount = 3

            CodableService.sharedInstance.savePostDetailsToDisk(postDetails: self.postDetails)
            self.tableView.reloadSections([0], with: UITableViewRowAnimation.fade)
        case .failure(let error):
            print(error.localizedDescription)
            self.postDetails = CodableService.sharedInstance.getPostDetailsFromDisk()
            self.sectionCount = 3
            self.tableView.reloadSections([0], with: UITableViewRowAnimation.fade)
        }
    }
}

А затем для отображения данных:

cell.textView.text = postDetails[indexPath.row]
...