我有点困惑,我如何解析一个给我20个对象的json API,然后给我一个" next"有一个网址,给了我另外20个对象。我正在使用此Pokemon API。它为我提供了4个键: 计数,之前的结果 和 next 。我试图在集合视图中显示所有内容,但不能同时显示所有内容。我想在集合视图向下滚动时加载更多。
我现在只是试图获得这个名字。这就是我的代码的样子。
我得到它在集合视图中加载前20个神奇宝贝。但是,我不知道如何加载下一个20个口袋妖怪或之后的20个。如果链接不起作用,这就是json文件的样子。
我很感激任何帮助。 :)
答案 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个小精灵。
希望它可以帮到你!
<强> EDITED 强>
下次你要求把你的代码放进去...它会更容易帮助你!