我想超时并在5秒内跳出此循环。我只能在网上找到的东西是每秒都有一个计数变量递增,然后打破计数为5的情况,但是想知道是否有更简单,更少更复杂的方式。请帮忙!在Swift中5秒后跳出while循环
locationManager.startUpdatingLocation()
while (locationManager.location == nil) {
//searching...
}
locationManager.stopUpdatingLocation()
我想超时并在5秒内跳出此循环。我只能在网上找到的东西是每秒都有一个计数变量递增,然后打破计数为5的情况,但是想知道是否有更简单,更少更复杂的方式。请帮忙!在Swift中5秒后跳出while循环
locationManager.startUpdatingLocation()
while (locationManager.location == nil) {
//searching...
}
locationManager.stopUpdatingLocation()
有一个while循环的问题是,如果它在主线程上,它将阻止用户使用该应用程序。您应该开始更新位置,然后使用GCD(假设您在OSX上; GCD在Linux上尚未提供)在五秒钟内运行以禁用位置管理器,从而开始更新位置并安排后台线程。您也可以安排它在一秒钟内运行,检查它是否存在,然后再次尝试或让它运行五秒钟。
您可以创建这样一个延时功能:
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 .
}
你可以每次运行测量进入循环之前的当前时间,再次循环。将实际值与开始时的值进行比较,如果差值大于5秒,则断开。这只是你要求的直接答案。但是,@ AlBlue的答案如下,你应该在iOS上做什么。 –
...或其他阻塞主线程的系统意味着阻塞图形用户界面。 –
没有什么比“更少更复杂”。最重要的指标是“正确”和“更具可读性”。以这种方式完成的无限循环首先是错误的。时间限制不会改善他们。 – Sulthan