我希望超时并在5秒内突破这个循环。我在网上找到的唯一一件事就是每秒都有一个计数变量增量,然后如果计数是5则会中断,但是想知道是否有一种更简单,更少密码的方式。请帮忙!
locationManager.startUpdatingLocation()
while (locationManager.location == nil) {
//searching...
}
locationManager.stopUpdatingLocation()
答案 0 :(得分:4)
有一个while循环的问题是,如果它在主线程上,它将阻止用户使用该应用程序。不应该这样做,你应该开始更新位置,然后使用GCD安排后台线程(假设您已经在OSX上运行; GCD在Linux上不可用)在五秒内运行以禁用该位置经理。您也可以安排它在一秒钟内运行,检查它是否存在,然后再次尝试或让它运行五秒钟。
答案 1 :(得分: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 .
}