2017-08-30 2 views
1

Facebookのログイン用の共通クラスを作成しました。ログイン後に取得したデータを、呼び出されたか要求されたView Controllerに返します。以下は私のコードです:facebookからフェッチされたモデルクラスからView Controllerにデータを渡します。

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 
} 

答えて

3

が完了ブロックを書き、クロージャのパラメータとして辞書を渡すことをお勧めしてください。

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

以下のように

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) } 

今のおかげでたくさんの男を呼び出し、それに時間を費やし、すでに、私の時間を救いました。 –

+2

@ iphone-6:私はあなたにいくつかの助けになることができるとうれしいです:)ハッピーコーディングといつも歓迎:) –

関連する問題