2017-02-16 43 views
0

用戶在我的應用程序中根據名稱搜索城市之後,我會從不同來源進行多個API調用以獲取有關城市的信息。Swift:從完成中停止方法

我想要添加一個停止按鈕,以便用戶可以停止搜索,例如,如果它們的wifi連接不好並且搜索時間過長。我用不同的方法調用了API調用,所以當用戶單擊「停止」按鈕時,我不會知道哪一個正在運行。

是否有人熟悉停止所有功能的方法,或者甚至只是在用戶單擊Stop時在應用程序中運行的API調用?

我已經在下面列出了我提出的解決方案,但想知道是否有人有更優雅的解決方案。

+0

基本上我認爲你是在描述NSOperation。我建議你看看,而不是重新發明輪子。通過將整個操作轉移到自己的類中,您可以單獨取消_each_操作,而不會混淆提議的時間戳。 – matt

+0

@matt謝謝,我不熟悉NSOperation。你有什麼好的建議,我應該看看? – Gibraltar

回答

0

我建議的解決方案是有兩個變量存儲時間戳,一個永久變量,另一個在用戶單擊搜索時調用的操作方法中創建。它的工作如下:

  • 用戶點擊搜索
  • 永久變量保存在搜索的準確時間:2017_02_16_4:35:26(日期和時間,以秒爲單位),在創建的變量操作方法是由永久變量
  • 一旦API調用是完全吻合,但在此之前的SEGUE以顯示新的信息被觸發時,我會檢查,以確保這兩個變量仍處於同步

  • 如果用戶點擊停止按鈕,我會將永久變量更改爲時間點擊Stop按鈕,並且由於兩個變量不匹配,segue不會執行。

    var permanentTimestamp = String() 
    
    @IBAction func searchButton(_ sender: Any) { 
        permanentTimestamp = // whatever the current time is 
        self.beginAPICalls() 
    } 
    
    func beginAPICalls() { 
        let uniqueCallTimestamp = permanentTimestamp 
    
        //... perform API calls and get information 
    
        if uniqueCallTimestamp == permanentTimestamp { 
          // perform segue 
        } else { 
          // the segue won't be triggered and the user can search again without having two searches go through 
        } 
    } 
    

我會考慮只使用布爾值,但如果用戶有互聯網連接,但它是非常緩慢的將是一個潛在的問題。用戶可以搜索(bool = true),單擊停止(bool = false),然後在第一組API調用完成之前再次單擊搜索(bool = true)。現在布爾是真實的,允許繼續發生,但是這兩個呼叫都會發生。