2017-08-30 15 views
1

我已經創建了一個用於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 
} 

請建議

回答

3

撰寫完成的塊並通過字典作爲在封閉的參數。

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:很高興我可以幫助你:)快樂的編碼,永遠歡​​迎:) –

相關問題