Ich habe ein Problem beim Drucken von Daten von Weather Underground. Mein Code funktioniert mit anderen Datenquellen, nur nicht mit Weather Underground. Ich habe sogar versucht, die URL mit den tatsächlichen Daten ersetzt werden (dh https://api.wunderground.com/api/APIKEY/forecast/geolookup/forecast/q/94129.json „), aber es wird nicht gedrucktWarum werden meine Wetterdaten nicht in Swift 3 gedruckt?
Irgendwelche Vorschläge auf, was es sein könnte
import Foundation
import UIKit
class APIManager {
func weatherJSON(zip: String, completion: @escaping ([Weather]) -> Void) {
let baseUrlString = "https://api.wunderground.com/api/APIKEY/forecast/geolookup/forecast/q/\(zip).json"
guard let url = URL(string: baseUrlString) else { return }
let task = URLSession.shared.dataTask(with: url) { (data, response, error) in
guard error == nil, let data = data else { return }
do {
guard let json = try JSONSerialization.jsonObject(with: data, options: []) as? [[String: Any]] else { return }
// MARK: Print JSON
print(json)
var weatherList = [Weather]()
for item in json {
if let weather = Weather.create(from: item) {
weatherList.append(weather)
}
}
completion(weatherList)
} catch {
print("Uh oh. You have an error with \(zip)!")
}
}
task.resume()
}
}
EDIT:.? GELÖST
I . der Code geschrieben unten verwendet haben und jetzt sehe Fehler
Guter erster Schritt würde sein, eine debugging Nachrichten in alle Ihre Wächteranweisungen zu kleben, um zu sehen, ob irgendwelche optionals nicht auspacken – XmasRights
Ihre 'Wächter' Aussage sagt effektiv" wenn es einen Fehler gibt, erzählen Sie mir nicht, aber gerade sofort Rückkehr." Also, ändern Sie das, um den Fehler vor der Rückgabe zu drucken. Oder, besser, ändern Sie Ihre Schließung zu sein "([Wetter] ?, Fehler?) -> Void", so dass Sie den Anrufer informieren können, wenn es einen Fehler gab, und es tun kann, was Sie in der Benutzeroberfläche zu melden/behandeln benötigen der Fehler. – Rob