Мне нужно получить данные JSON с нескольких разных конечных точек веб-сайта, чтобы получить полное представление об объектах, с которыми я работаю. Для этого я использую код downloadJSON ниже. Это работает нормально, за исключением того, что всякий раз, когда я создаю цикл for в downloadJSON () {}, количество итераций в цикле, похоже, умножается на количество в массиве конечных точек.
Например, я получаю длину 15 для массива1, а не длину 5, чего я и ожидал, поскольку в dataSet1 есть 5 объектов.
Не могли бы вы объяснить, почему это происходит, и что можно сделать, чтобы устранить проблему? Кроме того, я выполняю много своих манипуляций с данными в downloadJSON () {}, поэтому, если это неправильное место, это было бы полезно знать.
Ниже приведен обобщенный вариант кода, который я использую.
Заранее спасибо.
import UIKit
class CustomTabBar: UITabBarController {
let website = "https://www.website.com/"
let endpoints = ["endpoint1","endpoint2","endpoint3"]
var objects = ["obj1,obj2,obj3,obj4,obj5"]
var dataSet1 = [Struct1]()
var dataSet2 = [Struct1]()
var dataSet3 = [Struct1]()
var array1 = [Int]()
override func viewDidLoad() {
super.viewDidLoad()
let tab1 = OverallViewController(nibName: "OverallViewController", bundle: nil)
tab1.tabBarItem = UITabBarItem(title: "Overall", image: UIImage(named: "overallIcon"), tag: 1)
viewControllers = [tab1]
downloadJSON() {
for i in 0..<self.dataSet1.count {
self.array1.append(i)
}
tab1.dataSet1 = self.dataSet1
tab1.dataSet2 = self.dataSet2
tab1.dataSet3 = self.dataSet3
tab1.array1 = self.array1
tab1.overallView.reloadData()
}
}
func downloadJSON( completed:@escaping ()->()){
var data1 = [Struct1]()
var data2 = [Struct1]()
var data3 = [Struct1]()
for j in 0..<objects.count {
for i in 0..<endpoints.count {
guard let qurl = URL(string: website + endpoints[i] + objects[j]) else { return }
URLSession.shared.dataTask(with: qurl) { (data, response, error) in
if error == nil {
do{
switch i {
case 0:
data1 = try JSONDecoder().decode([Struct1].self, from: data!)
self.dataSet1 = data1 + self.dataSet1
case 1:
data2 = try JSONDecoder().decode([Struct1].self, from: data!)
self.dataSet2 = data2 + self.dataSet2
default:
data3 = try JSONDecoder().decode([Struct1].self, from: data!)
self.dataSet3 = data3 + self.dataSet3
}
DispatchQueue.main.async{ completed() }
} catch { print("JSON Error") }
}
}.resume()
}
}
}
}