Как мне повторно отправить URLRequest в случае неудачи?

Я не знаю, как повторно отправить URLRequest, если он не удался.

У меня есть функция, которая вызывает несколько API. На одном из запросов API примерно в половине случаев первая попытка оказывается неудачной, и мне приходится снова нажимать кнопку в моем приложении, чтобы оно снова запускало функцию, пока она не завершится. Я проследил свой код до того места, где он застрял, но я не уверен, как я могу справиться с этим, чтобы продолжать попытки запроса до успеха. Ниже мой код.

        let request = URLRequest(url: URL(string: urlNew)!)

        let session = URLSession.shared

        let task = session.dataTask(with: request, completionHandler: {data, response, error -> Void in
            // other logic happens here
        })

Большую часть времени он проходит нормально, и все работает, как ожидалось. Как мне заставить его продолжать попытки запроса, но в случае, если он не удастся? Это прекрасно, чтобы «позволить задаче ...», но именно здесь она и застревает. Для справки:

urlNew = "MyAPI String value is here"

person Jet.Black.Pope    schedule 01.05.2019    source источник


Ответы (1)


Вы можете вызвать функцию рекурсивно, когда запрос неуспешен.

func callAPI(urlNew:String) {
    let request = URLRequest(url: URL(string: urlNew)!)

    let session = URLSession.shared

    let task = session.dataTask(with: request, completionHandler: {data, response, error -> Void in
        // other logic happens here
        guard let data = data, error == nil else {
            self.callAPI(urlNew:urlNew)
            return
        }
    })
    task.resume()
}
person RajeshKumar R    schedule 01.05.2019