Автоматический повтор запроса URLSession

nsurlsession

#1

Есть метод внутри которого отрабатывает самый обычный URLSession. Метод получает данные заданного типа и возвращает их в замыкании (очень много запросов проходит через этот метод и делать обработку вручную не хочется.).

func sendRequest(requestResponse: @escaping (T?, ServiceError?, Int?) -> ()) {
//обработка ответа
}

Иногда от сервера может придти 403 код, это происходит когда например срок жизни токена аутентификации истек.

Как повторить запрос автоматически, чтобы пользователю не надо было ничего делать. И при этом вернуть данные в том же замыкании?


#2
enum ServerError: Error {
    case connectionFailed
}

func sendRequest(numberOfConnection: Int = 1, requestResponse: @escaping (Any?, Error?) -> ()) {
    URLSession.shared.dataTask(with: URL(string: "https://forum.swiftbook.ru")!) { data, response, error in
        let response = response as! HTTPURLResponse
        switch true {
        case response.statusCode == 200:
            requestResponse(data, nil)
        case numberOfConnection < 5:
            sendRequest(numberOfConnection: numberOfConnection + 1, requestResponse: requestResponse)
        default:
            requestResponse(nil, ServerError.connectionFailed)
        }
    }
}

sendRequest { data, error in
    
}


#3

@haymob, Спасибо. Правда в моём случае не совсем понятно насколько корректно всё отрабатывает. Тк на измененный запрос сервер опять возвращает 403, но это уже вопрос к бэку.