尝试使用 GET 请求在数组中动态创建数组

Posted

技术标签:

【中文标题】尝试使用 GET 请求在数组中动态创建数组【英文标题】:Trying to create an array within an array dynamically with a GET Request 【发布时间】:2017-06-16 17:46:29 【问题描述】:

我正在尝试使用我正在发出的 GET 请求在数组中创建一个数组。我希望数据看起来像

[heroesOfLOTR[Gandalf, Frodo, Aragorn], heroesOfStarWars[Yoda, Luke, ObiWan],heroesOfWheelOfTime[Rand, Matt, Perrin]] 

我浏览了多篇关于多维数组的帖子,但数据通常带有一个固定的数字,并且不能动态工作。我还看到很多类似这样的结果:

[[1,2,3][1,2,3,4][1,2]]

目前,这就是我的数据的样子,无法找到解决方案让它像提到的第一个数组一样工作。

我已经尝试了至少 10 或 15 种代码组合,但找不到解决方案。

JSON

 HeroLOTR  heroes:[ Sam Frodo Gandalf], HeroesOfStarWars  heroes:[ Yoda Luke ObiWan]

【问题讨论】:

对于初学者,您需要在收到解析数组后将您的 collectionView 和 tableView 告诉reloadData()。否则,这些视图将永远不会更新以反映您放入数组中的数据。 这只是数组的名称,而不是实际的表格视图或集合视图。我会改名 clarities 缘故 我知道,但看起来您正在使用这些数组中的数据来填充表格视图和集合视图中的数据。用数据填充这些数组后,您需要在每个视图上调用 reloadData(),否则它们将永远不会显示您刚刚收到的数据。 如果没有关于接收到的数据的更多信息,我很难理解失败的地方。我将假设您实际上正在取回数据。您是否能够将数据解析为 CalendarClass 对象?还是只是无法在 UI 中显示数据? 所以我的目标是将collectionView 放在tableview 中并像CalanderArray = [collectionView.tag][indexPath.item] 那样访问CalendarArray。但是如果我解析数据并将数据放入数组的方式是错误的,我就不能这样做。我问的问题只是想弄清楚如何获取数组,它的数据类似于 [heroesOfLOTR[Gandalf, Frodo, Aragorn], heroesOfStarWars[Yoda, Luke, ObiWan],heroesOfWheelOfTime[Rand, Matt, Perrin]]] 【参考方案1】:

我在这里推荐几件事:

首先,为你的英雄创建一个更具描述性的类或结构。这不是一项要求,但会在您继续开发时使您的代码更具可读性和可理解性。

class Hero  // Switch "class" to "struct" if you want a struct
  // Add whatever properties you want here
  let name: String

  init?(json: [String: Any]) 
    guard let name = json["name"] as? String else 
      return nil
    
    self.name = name
  

其次,您似乎正在尝试将每个英雄放入一个数组中(在这里也可以使用一组)。您可以再次创建一个类或结构来保存这些英雄。

class HeroGroup  // Just switch "class" to "struct" if you want a struct  
  let name: String
  let heroes: [Hero]

  init?(json: [String: Any?]) 
    guard let name = json["name"] as? String else 
      return nil
    
    self.name = name

    self.heroes = (json["heroes"] as? [[String: Any]])?.flatMap  Hero(json: $0)  ?? []
  

最后,当您收到响应时,您可以在完成闭包中编写如下代码:

guard let groups = response.value.arrayValue as? [[String: Any]] else 
  return // Have JSON that you can't parse


// This will give you [HeroGroup]
self.groupsOfHeroes = groups.flatMap  HeroGroup(json: $0)  // This is a property on your view controller
tableView.reloadData()

【讨论】:

我仍然在思考这个问题并将其实现到我的代码中。我给你的例子只是虚构的,因为我不能真正分享我的 API。很抱歉造成混乱,没有分享整个事情来给你提供背景信息。那么英雄群是阵中阵吗?我是否像 groupOfHeroes[collectionView.tag][indexPath.item] 一样访问它? 我将给你举一个 JSON 的例子。或者至少是它的虚拟数据版本。

以上是关于尝试使用 GET 请求在数组中动态创建数组的主要内容,如果未能解决你的问题,请参考以下文章

动态创建键值对数组(从 mongoDB 数据库中获取)

尝试使用动态内存分配创建节点指针数组

使用数组中的数据动态创建选择框

在 C++ 中使用动态内存分配创建二维数组

创建结构元素的动态数组,然后创建结构的动态数组。 C++

创建数组的动态数组[关闭]