2016-11-07 4 views
0

Im travaillant sur un projet dans Swift 3.0 et j'ai une procédure d'inscription d'authentification en utilisant Facebook. Donc, fondamentalement, j'ai fait la partie intégration FB et une fois connecté à un compte en conséquence, je reçois l'adresse e-mail de l'utilisateur, nom, Id et l'URL de la photo de profil comme ci-dessous depuis que je les ai demandé (c'est ce que Je reçois dans ma console). Le format que je reçois comme ci-dessous.définir les résultats de l'intégration de facebook aux étiquettes

Optional({ 
    email = "[email protected]"; 
    id = xxxxxxxxxx; 
    name = "xxxxxx xxxx"; 
    picture =  { 
     data =   { 
      "is_silhouette" = 0; 
      url = "https://scontent.xx.fbcdn.net/v/t1-1/c2.0.50.50/p50x50/10441341_10201209786847369_5426097469926927988_n.jpg?oh=1b4d8709be17338bc7e877d411b96eee&oe=58CE5B13"; 
     }; 
    }; 
}) 

Mon exigence est d'assigner ces champs d'email, de nom, d'identifiant aux étiquettes et de les imprimer.

Le code de mon contrôleur de vue pertinent ci-dessous. Que dois-je ajouter ??

import UIKit 
import FBSDKLoginKit 

class ViewController: UIViewController,FBSDKLoginButtonDelegate{ 

    @IBOutlet weak var displayLabel: UILabel! 
    @IBOutlet weak var loginButton: UIButton! 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     let loginButton = FBSDKLoginButton() 
     view.addSubview(loginButton) 
     //frame's are obselete, please use constraints instead because its 2016 after all 
     loginButton.frame = CGRect(x: 16, y: 50, width: view.frame.width - 32, height: 50) 

     loginButton.delegate = self 
     loginButton.readPermissions = ["email", "public_profile"] 

    } 
    func loginButtonDidLogOut(_ loginButton: FBSDKLoginButton!) { 
     print("Did log out of facebook") 
    } 

    @IBAction func loginButtonPressed(_ sender: AnyObject) { 
     FBSDKLoginManager().logIn(withReadPermissions: ["email"], from: self) { (result, err) in 
      if err != nil { 
       print("Custom FB Login failed:", err) 
       return 
      } 
      print("FB login Sucess") 
      print(result?.token.tokenString) 



      self.showEmailAddress() 
     } 
    } 

    func showEmailAddress() { 
     FBSDKGraphRequest(graphPath: "/me", parameters: ["fields": "id, name, email,picture"]).start { (connection, result, err) in 

      if err != nil { 
       print("Failed to start graph request:", err) 
       return 
      } 
      print(result) 

//   self.displayLabel.text = result["email"]as? NSMutableArray 
     } 
    } 

} 
+0

'résultat [" email "] as? NSMutableArray' pourquoi NSMutableArray? 'en tant que String', non? – Larme

+0

en dépit de ce que vous avez mis il donne un message d'erreur disant «Type Any n'a aucun abonnement membres». C'est pourquoi j'ai commenté cette ligne monsieur. Je veux juste assigner ce résultat à l'étiquette car j'ai essayé et échoué – danutha

+0

Vous devez dire au compilateur, que 'result' est un dictionnaire (dans notre cas:' [String: Any] '). – Larme

Répondre

1

d'abord spécifier le type de votre objet résultat à [String: Any] puis obtenir la valeur de celle-ci.

if let dic = result as? [String: Any] { 
    self.displayLabel.text = dic["email"] as? String 
    self.displayNameLabel.text = dic["name"] as? String 
    self.displayIdLabel.text = dic["id"] as? String 
}