2017-10-14 117 views
0

我正在使用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?

回答

0

我終於找到了解決這個答案:https://stackoverflow.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 
    ... 
} 
0

不能修改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)