2017-01-23 7 views
0

Ich weiß, wie man eine regelmäßige API-Aufruf mit Swift. Was ich nicht verstehen kann ist, wie man den API-Aufruf so lange wiederholt, bis er benötigt wird.Ich wiederhole Anfragen an API

Ich möchte die API aufrufen jede Sekunde

API-Aufruf-Code Snippet:

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() 

Hinweis: Dies ist nicht die eigentliche API werde ich

+0

Sie singen nicht Timer-Klasse? –

+0

Die Gerätebatterie wird entladen, wenn API alle 1 Sekunde aufgerufen wird. – Hasya

+0

Ich denke, Sie müssen Time Machine Request verwenden - https://darksky.net/dev/docs/time-machine – Hasya

Antwort

2

Idealerweise fordern werden, Software-Lösungen wie Finanzen, die Sie erwähnt haben, muss der Server Unterstützung für eine Art von Long Polling/WebSockets-Mechanismus haben, wo, sobald die Verbindung hergestellt ist Server den Client mit neuen Werten versorgt, wenn es Updates gibt ((https://stackoverflow.com/a/12855533/1436617)

Wenn Server nicht unterstützt: (Nicht die ideale Lösung): Sie können tatsächlich Rekursion in diesem verwenden. Bei Antwort (beide Erfolg & Fehler) der Anfrage rufen Sie erneut die gleiche Funktion auf. Auf diese Weise können Sie kontinuierlich Abfragen durchführen.

Denken Sie daran, den Anforderungstimer kurz zu halten (5 oder 10 Sekunden statt 60 Sekunden), damit Sie bei einem Netzwerkproblem schnell den nächsten Anruf tätigen können.