将数据传递给从Facebook获取的模型类的视图控制器登录

问题描述:

我已经创建了一个用于Facebook登录的公共类,并且想要从登录到视图控制器后调用或请求的位置返回数据。下面是我的代码:将数据传递给从Facebook获取的模型类的视图控制器登录

static func loginFB(vc: UIViewController) -> AnyObject 
{ 
    var dict = [String : AnyObject]() 

    let fbLoginManager : FBSDKLoginManager = FBSDKLoginManager() 
    fbLoginManager.logIn(withReadPermissions: ["email"], from: vc) { (result, error) in 
     if (error == nil){ 
      let fbloginresult : FBSDKLoginManagerLoginResult = result! 
      if fbloginresult.grantedPermissions != nil { 
       if(fbloginresult.grantedPermissions.contains("email")) 
{ 

        if((FBSDKAccessToken.current()) != nil){ 

         FBSDKGraphRequest(graphPath: "me", parameters: ["fields": "id, name, first_name, last_name, picture.type(large), email"]).start(completionHandler: { (connection, result, error) -> Void in 

          if (error == nil){ 
           dict = result as! [String : AnyObject] 
           print(result!) 

           let strEmail = dict["email"] as! String 
           let strFirstName = dict["first_name"] as! String 
           let strLastName = dict["last_name"] as! String 

           Constants.userDefault.defaults.set(strEmail, forKey: "email") 
           Constants.userDefault.defaults.set(strFirstName, forKey: "first_name") 
           Constants.userDefault.defaults.set(strLastName, forKey: "last_name") 
           //return dict 
          } 
         }) 
        } 
       } 
      } 
     } 
    } 
    print(dict) 
    return dict as AnyObject 
} 

请建议

撰写完成的块并通过字典作为在封闭的参数。

static func loginFB(vc: UIViewController,completion : @escaping ([String : AnyObject]) ->()) 
{ 
    var dict = [String : AnyObject]() 

    let fbLoginManager : FBSDKLoginManager = FBSDKLoginManager() 
    fbLoginManager.logIn(withReadPermissions: ["email"], from: vc) { (result, error) in 
     if (error == nil){ 
      let fbloginresult : FBSDKLoginManagerLoginResult = result! 
      if fbloginresult.grantedPermissions != nil { 
       if(fbloginresult.grantedPermissions.contains("email")) 
{ 

        if((FBSDKAccessToken.current()) != nil){ 

         FBSDKGraphRequest(graphPath: "me", parameters: ["fields": "id, name, first_name, last_name, picture.type(large), email"]).start(completionHandler: { (connection, result, error) -> Void in 

          if (error == nil){ 
           dict = result as! [String : AnyObject] 
           print(result!) 

           let strEmail = dict["email"] as! String 
           let strFirstName = dict["first_name"] as! String 
           let strLastName = dict["last_name"] as! String 

           Constants.userDefault.defaults.set(strEmail, forKey: "email") 
           Constants.userDefault.defaults.set(strFirstName, forKey: "first_name") 
           Constants.userDefault.defaults.set(strLastName, forKey: "last_name") 
           //return dict 
           completion(dict) 
          } 
         }) 
        } 
       } 
      } 
     } 
    } 
    print(dict) 
} 

现在叫它如下图所示

YourViewController.loginFB(vc: instance_of_vc) { (dict) in 
    print(dict) 
} 
+0

感谢很多人,救了我的时间,已经花了几个小时就可以了。 –

+2

@ iphone-6:很高兴我可以帮助你:)快乐的编码,永远欢​​迎:) –