Обновил almofire timeoutIntervalForRequest для каждого API в swift? - PullRequest
0 голосов
/ 11 февраля 2020

В нашем проекте мы используем сетевой менеджер для обработки всех запросов и ответов с помощью Alamofire. В alamofire мы используем тайм-аут по умолчанию как внутренний, равный 30. Но нам нужно изменить «timeoutIntervalForRequest» для некоторого запроса, например, 50,60 и c.

private var manager : SessionManager?

    func sessionManager() -> SessionManager {
        if let manage = self.manager {
            return manage
        }
        else {
            let configuration = URLSessionConfiguration.default
            configuration.timeoutIntervalForRequest = 30
            self.manager = SessionManager(configuration: configuration, delegate: CustomSessionDelegate())
            return self.manager!
        }
    }

Я добавил param timeinterval и установил значение по умолчанию в нем.

func sessionManager(timeoutInterval:Double = 30) -> SessionManager {
//passed the param 
configuration.timeoutIntervalForRequest = timeoutInterval
}

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

Ответы [ 2 ]

0 голосов
/ 11 февраля 2020

Вместо установки timeoutIntervalForRequest, почему бы не установить timeoutInterval в объекте URLRequest и передать этот запрос в функцию Alamofire.

    let request = NSMutableURLRequest(url: URL(string: "")!)
        request.httpMethod = "POST"
        request.setValue("application/json", forHTTPHeaderField: "Content-Type")
        request.timeoutInterval = 50 
Alamofire.request(request as! URLRequestConvertible).responseJSON {
        response in
        // do whatever you want here
    }
0 голосов
/ 11 февраля 2020

Вы можете переопределить функцию следующим образом:

func sessionManager(timeInterval : Double) -> SessionManager {
        if let manage = self.manager {
            return manage
        }
        else {
            let configuration = URLSessionConfiguration.default
            configuration.timeoutIntervalForRequest = timeInterval
            self.manager = SessionManager(configuration: configuration, delegate: CustomSessionDelegate())
            return self.manager!
        }
    }

Она будет отлично работать при каждом вызове API

...