Grundsätzlich habe ich eine Asynchron-Networking-Funktion:Wie kann ich Informationen aus einem Block in Swift speichern?
func networking(callback:NSDictionary -> Void) {
//stuff happens here
let task = NSURLSession.sharedSession().dataTaskWithRequest(request) { data, response, error in
if let error = error {
print("ERROR: \(error)")
return
}
do {
let json = try NSJSONSerialization.JSONObjectWithData(data!, options: .AllowFragments)
//print(json)
callback(json as! NSDictionary)
if let dataDict = json["data"] as? [String:AnyObject],
let rememberToken = dataDict["remember_token"] as? String {
self.rememberToken = rememberToken
//print("SUCCESS: \(rememberToken)")
// display success label & make button to get schedules available
}
} catch {
print(error)
}
}
task.resume()
}
Und alles, was ich tun kann, ist print (json) Daten Ich bin immer wieder. Ich möchte nur das Erinnerungs-Token, und ich speichere es in einer Eigenschaft. Das Problem, das ich habe, ist, wenn ich die Eigenschaft aufrufen, bekomme ich nichts, da der Haupt-Thread zuerst ausgeführt wird. Wie kann ich auf das Erinnerungs-Token von der Eigenschaft zugreifen, nachdem es dort gespeichert wurde?
Oder kann ich es woanders speichern?
Was ist der beste Weg, dies zu tun?
Sie müssen das Erinnerungs-Token nur _inside_ Callback verwenden (d. H. In der Nähe der Zeile, in der Sie das Token drucken). – paulvs
Setzen Sie die Callback-Zeile ** nach ** den Ausdruck, um das Token zu speichern – vadian
Ich habe den Rückruf (json as! NSDictionary) in die Zeile nach self.rememberToken = rememberToken verschoben, aber wenn ich zur nächsten Funktion gehe, und versuche zu drucken " self.rememberToken), bekomme ich immernoch nichts – John