2016-04-21 53 views
1

我想超时并在5秒内跳出此循环。我只能在网上找到的东西是每秒都有一个计数变量递增,然后打破计数为5的情况,但是想知道是否有更简单,更少更复杂的方式。请帮忙!在Swift中5秒后跳出while循环

locationManager.startUpdatingLocation() 
while (locationManager.location == nil) { 
    //searching... 
} 
locationManager.stopUpdatingLocation() 
+1

你可以每次运行测量进入循环之前的当前时间,再次循环。将实际值与开始时的值进行比较,如果差值大于5秒,则断开。这只是你要求的直接答案。但是,@ AlBlue的答案如下,你应该在iOS上做什么。 –

+0

...或其他阻塞主线程的系统意味着阻塞图形用户界面。 –

+1

没有什么比“更少更复杂”。最重要的指标是“正确”和“更具可读性”。以这种方式完成的无限循环首先是错误的。时间限制不会改善他们。 – Sulthan

回答

4

有一个while循环的问题是,如果它在主线程上,它将阻止用户使用该应用程序。您应该开始更新位置,然后使用GCD(假设您在OSX上; GCD在Linux上尚未提供)在五秒钟内运行以禁用位置管理器,从而开始更新位置并安排后台线程。您也可以安排它在一秒钟内运行,检查它是否存在,然后再次尝试或让它运行五秒钟。

0

您可以创建这样一个延时功能:

func delay(delay:Double, closure:()->()) { 

     dispatch_after(
      dispatch_time(DISPATCH_TIME_NOW, Int64(delay * Double(NSEC_PER_SEC))), dispatch_get_main_queue(), closure) 


    } 

和使用它像这样经过:

delay(5){ 
locationManager.location = //something different from nil or you can try with break sentence ; not sure if with break will work though . 

    }