如何解析为另一个URL提供更多数据的json数据

时间:2017-03-30 19:59:52

标签: ios json parsing swift3 uicollectionview

我有点困惑,我如何解析一个给我20个对象的json API,然后给我一个" next"有一个网址,给了我另外20个对象。我正在使用此Pokemon API。它为我提供了4个键: 计数,之前的结果 next 。我试图在集合视图中显示所有内容,但不能同时显示所有内容。我想在集合视图向下滚动时加载更多。

我现在只是试图获得这个名字。这就是我的代码的样子。

ViewController

Json func

Pokemon Class

我得到它在集合视图中加载前20个神奇宝贝。但是,我不知道如何加载下一个20个口袋妖怪或之后的20个。如果链接不起作用,这就是json文件的样子。

Pokemon api structure

我很感激任何帮助。 :)

1 个答案:

答案 0 :(得分:0)

您可以尝试使用递归函数重用loadPokemonsData函数,如下所示:

func loadPokemonsData(url: String, quantity: Int?) {
    let request = URLRequest(url: URL(string: url)!)

    let task = URLSession.shared.dataTask(with: request) { (data, response, error) in
        if error != nil {
            print(error!)
        }


        do {
            let jsonResults = try JSONSerialization.jsonObject(with: data!, options: .mutableContainers) as! NSDictionary

            let pokemonArray = jsonResults.value(forKey: "results") as! [[String: Any]]

            var isPokemonsEqualsToQuantity: Bool = false

            for pokemonData in pokemonArray {

                if let quantity = quantity {
                    guard self.pokemons.count < quantity else {
                        isPokemonsEqualsToQuantity = true
                        break
                    }
                }

                guard let name = pokemonData["name"] as? String else {
                    return
                }

                self.pokemon = Pokemon(name: name)
                self.pokemons.append(self.pokemon)
            }



            guard let nextURL = jsonResults.value(forKey: "next") as? String, !isPokemonsEqualsToQuantity else {
                for pokemon in self.pokemons {
                    print(pokemon.name)

                }
                print(self.pokemons.count)
                return
            }

            self.loadPokemonsData(url: nextURL, quantity: quantity)




        } catch let err as NSError {
            print(err.localizedDescription)
        }
    }

    task.resume()
}

附上运行算法功能的屏幕......打印791个小精灵。

enter image description here

希望它可以帮到你!

<强> EDITED

下次你要求把你的代码放进去...它会更容易帮助你!

  • 我已经更新了代码以设置你想要的数量(如果你想得到所有的小宠物,那就没有了),因此它只会让API中的小宠物返回它,如果你想要一个特定的小宠物来自ALL宠物小精灵你可以在获得所有小宠物后做一些。