在 Swift 中 5 秒后跳出 while 循环

Posted

技术标签:

【中文标题】在 Swift 中 5 秒后跳出 while 循环【英文标题】:Break out of while loop after 5 seconds in Swift 【发布时间】:2016-04-21 07:31:22 【问题描述】:

我想在 5 秒内超时并跳出这个循环。我能在网上找到的唯一一件事是每秒增加一个计数变量,然后在计数为 5 时中断,但想知道是否有更简单、更少编码的方法。请帮忙!

locationManager.startUpdatingLocation()
while (locationManager.location == nil) 
    //searching...

locationManager.stopUpdatingLocation()

【问题讨论】:

您可以在进入循环之前测量当前时间,并在每次运行循环时测量一次。将实际值与一开始得到的值进行比较,如果差异大于 5 秒,break。这只是对您所要求的内容的直接回答。但是,@AlBlue 下面的回答是你应该在 ios 上做的。 ...或任何其他阻塞主线程意味着阻塞图形用户界面的系统。 没有什么能比得上“更少的编码”。最重要的指标是“正确”和“更易读”。以这种方式完成的无限循环首先是错误的。时间限制不会改善他们。 【参考方案1】:

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

【讨论】:

【参考方案2】:

你可以像这样创建一个延迟函数:

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 .

    

【讨论】:

以上是关于在 Swift 中 5 秒后跳出 while 循环的主要内容,如果未能解决你的问题,请参考以下文章

for循环while循环

如何在 Python 中跳出 while 循环?

LabView While无法跳出循环?

如果在 while 循环内,则无法跳出 while 循环

第三章 循环

流程控制之while循环