Ich experimentiere mit Async-Anrufe, aber ich bin ein wenig verloren. Die print(json)
in der viewDidLoad
gibt ein leeres Wörterbuch aus, aber das innerhalb der Funktion druckt korrekt. Dies ist nicht überraschend; Es kommt zu diesem Druck, bevor der Async abgeschlossen ist. Ich kann nicht herausfinden, wie ich es beheben kann; Ich habe versucht, die Rückkehr in den Abschluss-Handler, aber ich habe einen Fehler, dass Unexpected non-void return value in void function
. Ich habe versucht, den Completion-Handler zu ändern, um einen Rückgabewert zu erwarten, aber entweder ist das nicht der richtige Ansatz oder ich habe es falsch gemacht.Fügen Sie einen Return-Handler in Async-Aufruf in Swift
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let json = getJson("https://maps.googleapis.com/maps/api/geocode/json?address=WashingtonDC&sensor=false")
print(json)
}
func getJson(url: String) -> AnyObject {
var json:AnyObject = [:]
let urlPath = NSURL(string: url)
let urlRequest = NSURLRequest(URL: urlPath!)
let config = NSURLSessionConfiguration.defaultSessionConfiguration()
let session = NSURLSession(configuration: config)
let task = session.dataTaskWithRequest(urlRequest, completionHandler: {
(data, response, error) in
if error != nil {
print("Error")
} else {
do {
json = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers)
print(json)
} catch {
print("json error")
}
}
})
task.resume()
return json
}
}
Randbemerkung: Ich fühle mich wie ich nicht wirklich richtig den Aufbau der json variablen Struktur, so dass jede Rückmeldung gibt es auch hilfreich! – thumbtackthief