【问题标题】:How to pass data from an api in a tableViewCell, to another tableViewCell in swift 4?如何将数据从 tableView Cell 中的 api 传递到 swift 4 中的另一个 uitableViewCell?
【发布时间】:2019-05-11 23:28:13
【问题描述】:

我正在开发一个电视跟踪应用程序,您可以在其中搜索电视节目并保存它们以查看新剧集何时播出。

我的问题是,我如何从searchTableViewControllerpresent 的单元格中获取电影数据并将所选数据放入myShowsTableViewController 的单元格中?

【问题讨论】:

  • 如果您需要在控制器之间共享数据,最好的方法是让一个对象充当您的数据模型。输入信息后,发送到数据对象;当需要显示时,控制器要求数据对象提供。
  • 单元格是视图。它们不保存数据。

标签: swift api uitableview tableview pass-data


【解决方案1】:

这是一个很宽泛的问题,一般不适合StackOverflow,后者是针对更多“粒度问题”的。

也就是说,我建议创建一个名为 DataManager 或类似名称的类。在进行 API 调用方面,我建议使用 Alamofire 之类的东西来进行 API 调用。最后,我建议阅读 Codable protocol 以解码 API 发回的 JSON。解码 JSON 时,您需要将结构存储在视图控制器可以看到的位置。

要使用 CocoaPods,here's a good primer(您可以将它们用于 Alamofire)。

您的数据管理器看起来像这样(为简单起见,我将使用 NSObject,但您可以创建自己的类):

struct Shows: Codable {
    // Whatever the API sends back, you've got to map it here
}

class DataManager: NSObject {
    var shows: [Shows] = [] // empty array of shows to start

    func methodToGetAPIResponse() {
        // Alamofire call & JSON decoding here
        // Once you get a valid response, shows = try JSONDecoder().decode...
    }
}

你可以在你的视图控制器类中为你的DataManager 做这样的事情:

let dataManager = DataManager()

然后,在您的 UITableViewDataSource 方法中,numberOfRowsAtIndexPath 将是 return dataManager.shows.countcellForRowAtIndexPath,您将获得对象以填充您的标签,如下所示:

let show = dataManager.shows[indexPath.row]

无论如何,这应该足以让您入门。祝你好运!以后尽量细化您的问题。

【讨论】:

  • 对于它的价值,我发现这个答案非常有见地(作为最近开始学习 Swift 但了解其他语言的人)。
  • @Nate 谢谢。我试图向 OP 扔一些骨头:从哪里开始,因为我已经穿上了他的鞋子。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-14
  • 1970-01-01
  • 2017-04-16
  • 1970-01-01
  • 2015-08-19
  • 2015-03-19
相关资源
最近更新 更多