Handle timeout with Alamofire

后端 未结 9 1658
暗喜
暗喜 2020-12-01 05:24

Is it possible to add timeout handler for Alamofire request?

In my project I use Alamofire this way:

init() {
    let configuration = NSURLSessionCon         


        
9条回答
  •  渐次进展
    2020-12-01 05:34

    Swift 4

    This my way and timeout feature is workable, meanwhile practices singleton for api class. reference from here

    struct AlamofireManager {
        static let shared: SessionManager = {
            let configuration = URLSessionConfiguration.default
            configuration.timeoutIntervalForRequest = 5
            let sessionManager = Alamofire.SessionManager(configuration: configuration, delegate: SessionDelegate(), serverTrustPolicyManager: nil)
            return sessionManager
        }()
    }
    
    class Auth {
        static let api = Auth()
    
        private init() {}
    
        func headers() -> HTTPHeaders {
            return [
                "Accept": "XXX",
                "Authorization": "XXX",
                "Content-Type": "XXX"
            ]
        }
    
        func querySample() {
    
            AlamofireManager.shared.request("api_post_url", method: .post, parameters: ["parametersKey": "value"], encoding: JSONEncoding.default, headers: headers())
                .responseJSON(queue: DispatchQueue.global(), options: []) { (response) in
                switch response.result {
                case .success(let value):
                    // do your statement
                case .failure(let error):
                    if error._code == NSURLErrorTimedOut {
                        // timeout error statement
                    } else {
                        // other error statement
                    }
                }
            })
        }
    
        func queryOtherSample() {
    
            AlamofireManager.shared.request("api_get_url", method: .get, parameters: nil, encoding: JSONEncoding.default, headers: headers())
                .responseJSON(queue: DispatchQueue.global(), options: []) { (response) in
                switch response.result {
                case .success(let value):
                    // do your statement
                case .failure(let error):
                    if error._code == NSURLErrorTimedOut {
                        // timeout error statement
                    } else {
                        // other error statement
                    }
                }
            })
        }
    
    }
    

提交回复
热议问题