2017-06-16 19 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樣子的例子。或者至少,它是一個虛擬數據版本。 –