2016-07-22 6 views
2

Der folgende Code gibt mir einen Fehler, da 'return self.myID' in der letzten geschweiften Klammer sein sollte. Wenn ich das tue, wird es self.myID als nicht aufgelösten Bezeichner beanspruchen, da es außerhalb der Schließung ist. Wie kann ich es so machen, dass ich außerhalb des Completion-Handlers auf self.myID zugreifen und den Rückgabewert setzen kann.Zugriff auf Wert außerhalb des Beendigungshandlers nicht möglich

func chatPartnerId() -> String? { 
 
     nextrequest.startWithCompletionHandler { (connection: FBSDKGraphRequestConnection! , result: AnyObject!, error: NSError!) -> Void in 
 
      self.myID = result["id"] as! String 
 
      return self.myID 
 

 
     } 
 
    }

Antwort

1

Statt ein String verwenden ein completion handler der Rückkehr:

func chatPartnerId(completion: (result: AnyObject?, error: NSError?)->()) { 
     nextrequest.startWithCompletionHandler { (connection: FBSDKGraphRequestConnection! , result: AnyObject!, error: NSError!) -> Void in 
      if((error) != nil){ 
       completion(result:nil,error:error) 
      } 
      else{ 
       self.myID = result["id"] as! String 
       completion(result:self.myID, error:nil) 
      } 


     } 
    } 

als

chatPartnerId() { (result,error) -> Void in 
     if let error = error{ 
      print(error) 
     } 
     if result != nil { 
      print(result) 

     } 
    } 
+0

danke soviel Rufen – slimboy