Alamofire超时不适用于Swift 3
问题描述:
我正在使用Alamofire进行网络请求并希望添加超时。但Alamofire的功能不起作用。当我写了下面的代码Alamofire超时不适用于Swift 3
let manager = Alamofire.SessionManager.default
manager.session.configuration.timeoutIntervalForRequest = 1 // not working, 20 secs normally (1 just for try)
manager.request(url, method: method, parameters: params)
.responseJSON { response in
print(response)
...
当我尝试没有Alamofire的网络请求,超时工作的成功没有任何反应。但还有其他错误。
var request = URLRequest(url: URL(string: url)!)
request.httpMethod = "post"
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.timeoutInterval = 1 // 20 secs normally (1 just for try)
request.httpBody = try! JSONSerialization.data(withJSONObject: params!)
...
那么,怎样才能在我斯威夫特3添加超时Alamofire?
答
我终于找到了解决这个答案:https://*.com/a/44948686/7825024
当我添加我的功能,但它的工作原理当我把它添加到AppDelegate中此配置代码不起作用!
AppDelegate.swift
import UIKit
var AFManager = SessionManager()
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
let configuration = URLSessionConfiguration.default
configuration.timeoutIntervalForRequest = 5 // seconds
configuration.timeoutIntervalForResource = 5 //seconds
AFManager = Alamofire.SessionManager(configuration: configuration)
return true
}
...
}
实施例:
AFManager.request("yourURL", method: .post, parameters: parameters).responseJSON { response in
...
}
答
不能修改URLSessionConfiguration
的值之后,它已经被添加到URLSession
,因此试图操纵Alamofire.SesssionManager.default.session.configuration
总是会失败。要正确更改配置值,请按照Alamofire文档来实例化您自己的SessionManager
。例如:
var defaultHeaders = Alamofire.SessionManager.defaultHTTPHeaders
defaultHeaders["DNT"] = "1 (Do Not Track Enabled)"
let configuration = URLSessionConfiguration.default
configuration.httpAdditionalHeaders = defaultHeaders
let sessionManager = Alamofire.SessionManager(configuration: configuration)