Swift/iOS 10 秒后的超时功能

Nis*_*Roy 5 timeout ios swift

如果尝试连接 10 秒后登录未成功,我想显示“网络错误”消息。

如何在 10 秒后停止登录功能并显示此错误消息?

我正在使用 AlamoFire。

我没有完整的实现,但这是我希望我的函数行为的骨架:

func loginFunc() {

    /*Start 10 second timer, if in 10 seconds 
     loginFunc() is still running, break and show NetworkError*/


    <authentication code here>
}
Run Code Online (Sandbox Code Playgroud)

Hir*_*age 13

这是 Swift 4 的解决方案

DispatchQueue.main.asyncAfter(deadline: .now() + 3) {
   // Excecute after 3 seconds
}
Run Code Online (Sandbox Code Playgroud)


Raj*_*jat 4

如果您使用Alamofire下面的代码来定义超时

let configuration = NSURLSessionConfiguration.defaultSessionConfiguration()
configuration.timeoutIntervalForRequest = 10 // seconds
configuration.timeoutIntervalForResource = 10
self.alamoFireManager = Alamofire.Manager(configuration: configuration)
Run Code Online (Sandbox Code Playgroud)

你也不需要通过计时器来管理它,因为计时器将在 10 秒后触发,与你的 API 是否得到响应无关,只需通过超时来管理它。

这是管理超时的方法

self.alamofireManager!.request(.POST, "myURL", parameters:params)
.responseJSON { response in
    switch response.result {
        case .Success(let JSON):
            //do json stuff
        case .Failure(let error):
            if error._code == NSURLErrorTimedOut {
               //call your function here for timeout
            }
     }
}
Run Code Online (Sandbox Code Playgroud)