2017-06-16 62 views
0

我正尝试在数组中使用GET请求创建数组。我想要的数据看起来像尝试使用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}] 
+0

对于初学者来说,你要去想告诉的CollectionView和的tableView到''reloadData()'完成接收解析数组后。否则,这些视图将不会更新以反映您放入数组中的数据。 – AdamPro13

+0

它只是数组的名称,而不是实际的tableview或collection视图。我会更改clarities的名字清酒 –

+0

我知道,但它看起来像您使用这些数组中的数据来填充表视图和集合视图中的数据。一旦你用数据填充了这些数组,你需要在每个视图上调用'reloadData()',否则他们将永远不会显示刚收到的数据。 – AdamPro13

回答

0

有几件事情我会在这里推荐:

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

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() 
+0

仍然包裹着我的头,并将其实现到我的代码中。我给你的例子只是由于我无法真正分享我的API而编造的。对于混淆,不要分享整个事情给你的上下文。那么阵列中的数组是英雄组?我是否像groupOfHeroes [collectionView.tag] [indexPath.item]一样访问它? –

+0

我打算给你一个JSON样子的例子。或者至少,它是一个虚拟数据版本。 –