2017-01-23 145 views
0

我知道如何使用swift進行常規API調用。我無法理解的是如何在必要時重複API調用。向API重複請求

我想調用API每隔一秒

API調用代碼段:

let url = URL(string: "https://api.darksky.net/forecast/34eaef38915078ea03c22bb9063bd7ea/37.8267,-122.4233") 
    let request = URLRequest(url: url!, cachePolicy: URLRequest.CachePolicy.reloadIgnoringCacheData, timeoutInterval: 10) 

    let session = URLSession(configuration: URLSessionConfiguration.default, delegate: nil, delegateQueue: OperationQueue.main) 



    let task: URLSessionDataTask = session.dataTask(with: request, completionHandler: { (data: Data?, response: URLResponse?, error: Error?) in 

     if let error = error { 

      print(error) 

     } else if let data = data, 
      let dataDictionary = try! JSONSerialization.jsonObject(with: data, options: []) as? NSDictionary { 
      print("API Data:") 
      print(dataDictionary) 

     } 
    }) 
    task.resume() 

注:這不是實際的API,我會打電話

+0

你不唱定時課嗎? –

+0

每1秒調用API時,設備電池會耗盡。 – Hasya

+0

我想你需要使用時間機器請求 - https://darksky.net/dev/docs/time-machine – Hasya

回答

2

理想的情況下,爲像你提到的財務軟件解決方案,服務器必須支持某種長輪詢/ websockets機制,一旦連接建立,服務器就會在客戶端有更新時爲其提供新值(請參考:https://stackoverflow.com/a/12855533/1436617

如果服務器不支持:(不是理想的解決方案): 您實際上可以在此使用遞歸。對請求的響應(成功&失敗)請求再次調用相同的函數。這樣你可以不斷保持投票。

請記住保持請求計時器短(5或10秒而不是60秒),以便在出現網絡問題時快速進行下一次呼叫。