2016-04-21 59 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 . 

    }