Swift / iOS 10秒后超时功能

时间:2016-10-21 03:17:01

标签: ios swift timeout

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

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

我正在使用AlamoFire。

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

func loginFunc() {

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


    <authentication code here>
}

3 个答案:

答案 0 :(得分:3)

func delay(delay:Double, closure:()->()) {
    dispatch_after(
        dispatch_time( DISPATCH_TIME_NOW, Int64(delay * Double(NSEC_PER_SEC))), dispatch_get_main_queue(), closure)
}

func loginFunc() {

    delay(10.0){
        //time is up, show network error
        //return should break out of the function (not tested)
        return
    }

    //authentication code

答案 1 :(得分:1)

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

let configuration = NSURLSessionConfiguration.defaultSessionConfiguration()
configuration.timeoutIntervalForRequest = 10 // seconds
configuration.timeoutIntervalForResource = 10
self.alamoFireManager = Alamofire.Manager(configuration: configuration)

你也不需要通过计时器进行管理,因为计时器将在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
            }
     }
}

答案 2 :(得分:0)

这是Swift 4的解决方案

DispatchQueue.main.asyncAfter(deadline: .now() + 3) {
   // Excecute after 3 seconds
}