用戶在我的應用程序中根據名稱搜索城市之後,我會從不同來源進行多個API調用以獲取有關城市的信息。Swift:從完成中停止方法
我想要添加一個停止按鈕,以便用戶可以停止搜索,例如,如果它們的wifi連接不好並且搜索時間過長。我用不同的方法調用了API調用,所以當用戶單擊「停止」按鈕時,我不會知道哪一個正在運行。
是否有人熟悉停止所有功能的方法,或者甚至只是在用戶單擊Stop時在應用程序中運行的API調用?
我已經在下面列出了我提出的解決方案,但想知道是否有人有更優雅的解決方案。
用戶在我的應用程序中根據名稱搜索城市之後,我會從不同來源進行多個API調用以獲取有關城市的信息。Swift:從完成中停止方法
我想要添加一個停止按鈕,以便用戶可以停止搜索,例如,如果它們的wifi連接不好並且搜索時間過長。我用不同的方法調用了API調用,所以當用戶單擊「停止」按鈕時,我不會知道哪一個正在運行。
是否有人熟悉停止所有功能的方法,或者甚至只是在用戶單擊Stop時在應用程序中運行的API調用?
我已經在下面列出了我提出的解決方案,但想知道是否有人有更優雅的解決方案。
我建議的解決方案是有兩個變量存儲時間戳,一個永久變量,另一個在用戶單擊搜索時調用的操作方法中創建。它的工作如下:
一旦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)。現在布爾是真實的,允許繼續發生,但是這兩個呼叫都會發生。
基本上我認爲你是在描述NSOperation。我建議你看看,而不是重新發明輪子。通過將整個操作轉移到自己的類中,您可以單獨取消_each_操作,而不會混淆提議的時間戳。 – matt
@matt謝謝,我不熟悉NSOperation。你有什麼好的建議,我應該看看? – Gibraltar