Передача данных для просмотра контроллера из класса модели, полученного с входа в 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
}

Пожалуйста, предложите

1 ответ

Решение

Напишите блок завершения и передайте dict как параметр в замыкании.

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)
}
Другие вопросы по тегам