2016-10-27 2 views
-2

Ich versuche, in Swift auf zwei Datenbits von OpenWeatherMap zuzugreifen. Der erste ist die Beschreibung und der zweite ist die Temperatur. Ich bin Zugriff auf die Beschreibung mit dem folgenden CodeZugriff auf APIs von openweathermap

if let description = ((jsonResult["weather"]as? NSArray)?[0]as? NSDictionary)?["main"]as? String { 

         DispatchQueue.main.sync(execute:) { 
          self.resultLabel.text = description 

Nun ist die Frage, die ich habe, ist, den Zugriff auf die Temperatur, die diesen Druck mögen konfiguriert ist (: „„Temperatur (bei schönem Wetter [“main] [“ temp "]! !) ") im Gegensatz zu print (" Wetterbeschreibung: (Wetter ["Wetter"]! [0]! ["Beschreibung"] !!) ") Wie konfiguriere ich den obigen Code um auf die Temperaturdaten zuzugreifen. Danke, dass Sie sich das für mich angesehen haben.

+0

'((JsonResult [ "main"] als? NSArray)? [0] als? NSDictionary)? [ "Temp"], wie? String 'Mmm ... du gewinnst nichts, wenn du so viel auf die gleiche Linie füllst, ganz im Gegenteil ...: p – Moritz

+0

Was würdest du vorschlagen? – AltBrian

+0

Ich schlage vor, Sie hören damit auf. :) Verwenden Sie zum Beispiel 'if let' oder' guard let', um * sicher * Ihre Werte Schritt für Schritt auszupacken und 'else'-Klauseln hinzuzufügen, um mögliche Fehler zu behandeln. Setzen Sie nicht alles in Einzeiler, der Code wird nicht schneller und es ist schwer zu warten und zu debuggen. Verwenden Sie auch Swift-Typen (typisiertes Array anstelle von NSArray usw.). – Moritz

Antwort

0

Nach viel Recherche funktionierte das für mich.

if let main = jsonResult["main"] as? NSDictionary { 
         print(main) 
         if let temp = main["temp"] as? Double { 
          DispatchQueue.main.sync(execute:) { 
          self.tempLabel.text = String(format: "%.1fº Centigrade", temp) 
          } 
Verwandte Themen