在UITableView和自定义单元格之间传递数据并将其存储

时间:2018-09-21 22:48:41

标签: ios swift struct tableview codable

我正在一个实践项目中,其中iOS应用程序从jsonplaceholder.typicode.com打印/ posts列表,并且当用户选择一个时,将加载详细的视图控制器,并显示有关该帖子的更多信息(作者和评论数)。后两个来自不同的端点。

到目前为止,对于主博客列表,第一个api调用是在主视图控制器加载时进行的。当用户点击单元格时,正文文本将通过segue传递,因为此信息需要显示在详细视图控制器上,以及该帖子的userId和ID(用于下一个api调用)。在详细视图控制器中,再进行两个API调用(每个所需的端点一个),因此所有数据都准备就绪。

截至目前,此数据已存储在数组中。字符串,字符串,整数(作者,正文和评论数)。

当我意识到这是一种非常棘手的方法时,我能更好地表示这些数据吗?主视图控制器/发布数据包含在一个Post结构中,但是我不确定如何将三个单独的数据组合在一个结构中以用于详细的视图控制器。

有关API调用/结构,请参见Refining Swift API GET Functions

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]

0 个答案:

没有答案