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