Как выполнить несколько сетевых вызовов с одним параметром, который имеет около 20 идентификаторов? - PullRequest
0 голосов
/ 05 мая 2020

Чего я хочу достичь?

У меня есть единственный параметр с 20 идентификаторами, как показано ниже. Я хочу, чтобы все эти данные id были в одном массиве.

https://someWebsite.com/1
https://someWebsite.com/2
https://someWebsite.com/3
https://someWebsite.com/4

и так далее ....

Вместо того, чтобы писать один и тот же код снова и снова, я хочу вызвать их все сразу и соберите эти данные в один массив.

Что я сделал до сих пор?

Мой код ниже

Моя модель

struct Base: Codable {
    let aType: Type?

    enum CodingKeys: String, CodingKey {
       case aType = "a_type"
    }
}



struct Type: Codable {
    let name: String?

    enum CodingKeys: String, CodingKey {
       case name
    }
}

Мой сетевой код

func getRequest(urlString: String?) {
     guard let urlString = urlString else { return }
     var namesArr = [String]()
     let urlSession = URLSession.shared
     for i in 1...20 {
         let finalURLString = urlString + "/\(i)"
         guard let url = URL(string: finalURLString) else { return }
         let task = urlSession.dataTask(with: url) { data, response, error in
             if error != nil {
                 print("Lost here itself")
                 return
             }
             do {
                 guard let data = data else { return }
                 let decoder = JSONDecoder()
                 let decodedData = decoder.decode(Base.self, form: data)
                 guard let temp = decodedData.aType else { return }
                 guard let nameText = temp.name else { return }
                 namesArr.append(nameText)
                 print(namesArr)
             } catch {
                 print(error.localizedDescription)
             }
          }
          task.resume()
      }
}

Вызов метода

getRequest(urlString: "https://someWebsite.com")

С какой проблемой я столкнулся?

Из приведенного выше В настоящее время я получаю 6 значений в свой массив из 20, а для остальных 14 он выдает ошибку ниже

The data couldn’t be read because it isn’t in the correct format.

И, наконец, одна важная вещь - когда я делаю отдельные сеансы urlSessions для каждого случая i Я получаю все значения без каких-либо проблем.

Какие у меня вопросы?

  • Любой другой способ сделать несколько вызовов, кроме использования для l oop ?
  • Почему только несколько вызовов возвращают данные, в то время как другие выдают ошибку из моих 20 вызовов?

Любая помощь по этому поводу Ульд будет здорово.

...