2016-10-21 6 views
3

Я хочу отобразить сообщение об ошибке «Network Error», если через 10 секунд после попытки подключения логин не будет выполнен.Функция таймаута через 10 секунд Swift/iOS

Как я могу остановить свою функцию входа через 10 секунд и показать это сообщение об ошибке?

Я использую AlamoFire.

У меня нет полной реализации, но это скелет, что я хочу, чтобы моя функция ведет себя как:

func loginFunc() { 

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


    <authentication code here> 
} 
+1

Обновить свой вопрос с вашим соответствующим кодом, который вы хотите тайм-аут. – rmaddy

+0

Обновлен с функцией скелета. –

+0

Обновите свой вопрос с помощью действующего рабочего кода, который необходимо обновить с помощью тайм-аута. – rmaddy

ответ

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 
      } 
    } 
} 
+0

Спасибо Rajat. Как мне вызвать функцию, когда она выполняет тайм-аут? Предположим, я хочу называть некоторый 'myFunc()', когда AlamoFire истекает время. –

+1

Отредактированный мой ответ, чтобы обработать таймаут, пожалуйста, проверьте. – Rajat

+0

Когда я использую только 'Alamofire', мой запрос работает нормально. Когда я использую 'Alamorefire.Manager', он говорит' NSErrorFailingURLStringKey' –

1
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 
+0

Swift 3: http://stackoverflow.com/a/37801602/995049 – Alexey

Смежные вопросы