Ich versuche eine einfache Wetter-App zu erstellen, die den Standort des Benutzers erfasst und einfache Wetterdaten mit der Google Maps API anzeigt. Alles funktioniert, außer für diesen Teil, wo ich den JSON nehme und die Adresse bekomme.Wie konvertiert man NSData zu Daten in Swift 3?
func getAddressForLatLng(latitude: String, longitude: String) {
let url = NSURL(string: "\(baseUrl)latlng=\(latitude),\(longitude)&key=\(apikey)")
let data = NSData(contentsOf: url! as URL)
let json = try! JSONSerialization.jsonObject(with: data, options: JSONSerialization.ReadingOptions.allowFragments) as! Dictionary
if let result = json["results"] as? Dictionary {
if let address = result[0]["address_components"] as? Array {
let number = address[0]["short_name"] as! String
let street = address[1]["short_name"] as! String
let city = address[2]["short_name"] as! String
let state = address[4]["short_name"] as! String
let zip = address[6]["short_name"] as! String
weatherDisplay.text = "\(city),\(state)"
}
}
}
Auf der Linie:
let json = try! JSONSerialization.jsonObject(with: data, options: JSONSerialization.ReadingOptions.allowFragments) as! Dictionary
ich diesen Fehler:
Cannot invoke 'jsonObject' with an argument list of type '(with: NSData?, options: JSONSerialization.ReadingOptions)'
Was mache ich falsch?
Keine Notwendigkeit, hier NSData (oder NSURL) überhaupt zu benutzen. 'let url = URL (string: ...)', 'let data = Daten (contentsOf: ...)' –
Das Problem ist, dass Sie ein optionales 'JSONSerialization' übergeben. Sie können Unwrap-Daten erzwingen, z. 'JSONSerialization.jsonObject (mit: data !, Optionen: JSONSerialization.ReadingOptions.allowFragments) as! Dictionary' –
Beachten Sie, dass 'NSData (contentsOf: url! As URL)' (oder 'Data (contentsOf:)' 'in Swift 3) eine schlechte Idee ist. Das ist ein synchroner Aufruf und wird die Benutzeroberfläche bis zum Abschluss einfrieren. Sie sollten dies wirklich neu schreiben, um NSURLSession zu verwenden. –