FBSDKGraphRequestHandler斯威夫特3错误

问题描述:

我试图调试我的整个应用程序,目前我下到3个错误,所有相同的错误。我花了几个小时试图对我自己调试这些过去的3个错误,但我一直没成功。当然,3个错误是一样的,我知道,一旦我调试一个,我可以调试所有这些FBSDKGraphRequestHandler斯威夫特3错误

的错误与Facebook的SDK,特别是FB SDK图形请求处理程序。

这是代码

func loginButton(_ loginButton: FBSDKLoginButton!, didCompleteWith result: FBSDKLoginManagerLoginResult!, error: Error?) { 
      if let error = error { 
       print(error.localizedDescription) 
       return 
      } 
      else{ 
       let credential = FacebookAuthProvider.credential(withAccessToken: FBSDKAccessToken.current().tokenString) 

       // If already anon user exists link with new user 
       if Auth.auth().currentUser != nil{ 
        Auth.auth().currentUser!.link(with: credential) { (user, error) in 
         // ... 
        } 
       } 

let req = FBSDKGraphRequest(graphPath: "me", parameters: ["fields": "email,first_name, last_name, birthday, gender"], tokenString: FBSDKAccessToken.current().tokenString, version: nil, httpMethod: "GET") 

req ? .start(completionHandler: { 
      (connection, result, error: NSError!) - > Void in 
      if (error == nil) { 
       print("result \(result)") 
       Auth.auth() ? .signIn(with: credential) { 
        (user, error) in 
        if error != nil { 
         print("Login failed. \(error)") 
        } else { 
         print("Logged in! \(user)") 
         FirebaseUtility.sharedInstance.setUser(user!) 

         let name = String.init(format: "%@ %@", result.value(forKey: "first_name") as!String, result.value(forKey: "last_name") as!String) 
         FirebaseUtility.sharedInstance.editUserValue(name, key: "name") 
         if (result.object(forKey: "gender") != nil) { 
          let gender = result.object(forKey: "gender") as!String 
          FirebaseUtility.sharedInstance.editUserValue(gender.capitalized, key: "gender") 
         } 
         if (result.object(forKey: "email") != nil) { 
          let gender = result.object(forKey: "email") as!String 
          FirebaseUtility.sharedInstance.editUserValue(gender.capitalized, key: "email") 
         } 


         if self.isSignupflow == true { 
          FirebaseUtility.sharedInstance.sendToken() 

          // this user hasn't completed his profile so show him profile page 
          let vc: SignupViewController = SignupViewController(nibName: "SignupViewController", bundle: nil) 
          self.present(vc, animated: true, completion: nil) 
         } else { 
          FirebaseUtility.sharedInstance.isFirstTimeUser { 
           (isFirstTimeUser) in 

           if isFirstTimeUser { 
            FirebaseUtility.sharedInstance.sendToken() 
             // this user hasn't completed his profile so show him profile page 
            let vc: SignupViewController = SignupViewController(nibName: "SignupViewController", bundle: nil) 
            self.present(vc, animated: true, completion: nil) 
           } else { 
            // take him into app 
            //        self.loginSuccessful() 
            let vc: RecordViewControllerNew = RecordViewControllerNew(nibName: "RecordViewControllerNew", bundle: nil) 
            vc.isBackButtonHidden = true 
            self.present(vc, animated: true, completion: nil) 
           } 

          } 



         } 
        } 

       } 
      } 

出现的错误是:

无法将类型的价值 '(,_,NSError!) - >虚空' 预期参数类型'FBSDKGraphRequestHandler!'

,它发生在这行代码的

req ? .start(completionHandler: { 
       (connection, result, error: NSError!) - > Void 

任何帮助,将不胜感激,我知道一旦这个错误得到解决,更多的错误都将被创建的,不过这只是如何编码工作:)

谢谢!有

FBSDKGraphRequestHandler可选Error?作为最后一个参数不是NSError!,所以完成街区req?.start(completionHandler: { (connection, result, error: NSError!) - > Void改变req?.start(completionHandler: { (connection, result, error) in将减少错误。

也在发生变化之后,你得到像新的警告。

'FBSDKGraphRequestConnection?'类型的表达式未使用

所以只需添加_ =req?.start前缀。

_ = req?.start(completionHandler: { (connection, result, error) in 
    //Add your code here 
})