2016-04-06 12 views
0

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?

+0

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

+0

Setzen Sie die Callback-Zeile ** nach ** den Ausdruck, um das Token zu speichern – vadian

+0

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

Antwort

0

Es gibt zwei Möglichkeiten, wie Sie damit umgehen können:

  1. Delegierter Verwendung und Protokolle

  2. Bausteine ​​verwenden

bevorzugt sein Blöcke.

Es gibt Tonnen von Tutorial und SO Antwort auf beide von ihnen so wird die Implementierung hier nicht zur Verfügung stellen.

Verwandte Themen