iOS - Swift Facebook Graph 请求完成处理程序 - 表达式类型不明确,没有更多上下文

Posted

技术标签:

【中文标题】iOS - Swift Facebook Graph 请求完成处理程序 - 表达式类型不明确,没有更多上下文【英文标题】:iOS - Swift Facebook Graph Request completion handler - Type of expression is ambiguous without more context 【发布时间】:2016-02-12 19:53:43 【问题描述】:

我正在尝试使这个 Facebook Graph 请求工作,但我收到两个错误:

    无法将类型“(,,_) throws -> Void”的值转换为预期的参数类型“FBSDKGraphRequestHandler!” - 第 6 行 没有更多上下文,表达式类型不明确 - 第 14 行

这是我的 viewDidLoad() 代码:

override func viewDidLoad() 
    super.viewDidLoad()


    let graphRequest = FBSDKGraphRequest(graphpath: "me", parameters: ["fields": "id, name, gender"])
    graphRequest.startWithCompletionHandler( 

        (connection, results, error) -> Void in

        if error != nil 

            print(error)

         else if let result = results 

            PFUser.currentUser()?["gender"] = result["gender"]
            PFUser.currentUser()?["name"] = result["name"]

            try PFUser.currentUser()?.save() 


            let userId = result["id"] as! String

            let facebookProfilePictureUrl = "https://graph.facebook.com/" + userId + "/picture?type=large"

            if let fbpicUrl = NSURL(string: facebookProfilePictureUrl) 

                if let data = NSData(contentsOfURL: fbpicUrl) 

                    self.profilePicture.image = UIImage(data: data)

                    let imageFile:PFFile = PFFile(data: data)!

                    PFUser.currentUser()?["image"] = imageFile

                    try PFUser.currentUser()?.save()

                
    )




如果您对如何解决此问题有任何建议,如果您能告诉我,我们将不胜感激!谢谢。

【问题讨论】:

【参考方案1】:

问题是您使用try 而不使用do-catch

let graphRequest = FBSDKGraphRequest(graphPath: "me", parameters: ["fields": "id, name, gender"])
    graphRequest.startWithCompletionHandler  (connection, results, error) -> Void in

        if error != nil 
            print(error)
         else if let result = results 
            PFUser.currentUser()?["gender"] = result["gender"]
            PFUser.currentUser()?["name"] = result["name"]

            do 
                try PFUser.currentUser()?.save()
             catch let ex 
                print(ex)
            

            let userId = result["id"] as! String
            let facebookProfilePictureUrl = "https://graph.facebook.com/" + userId + "/picture?type=large"

            if let fbpicUrl = NSURL(string: facebookProfilePictureUrl),
                data = NSData(contentsOfURL: fbpicUrl) 
                    self.profilePicture.image = UIImage(data: data)
                    let imageFile:PFFile = PFFile(data: data)!
                    PFUser.currentUser()?["image"] = imageFile
                    do 
                        try PFUser.currentUser()?.save()
                     catch let ex 
                        print(ex)
                    
            
        
    

或者您可以使用try?try!

try? PFUser.currentUser()?.save()

但是使用save()的方法不好选。它锁定当前线程。如果您需要确保成功保存或saveEventually,则最好使用带有完成块的saveInBackground。 顺便提一句。你的代码格式不是很好,真的很难阅读......

【讨论】:

以上是关于iOS - Swift Facebook Graph 请求完成处理程序 - 表达式类型不明确,没有更多上下文的主要内容,如果未能解决你的问题,请参考以下文章

Facebook 登录 Swift iOS 10 - 没有任何效果

Facebook 使用 Parse SDK 登录(iOS 9、Xcode 7.1、Swift 2.1)

Swift 中带有 Branch.io 的 Facebook AppInvites 示例

我如何从 facebook 公开资料 Facebook IOS Swift SDK 中获取性别

在 iOS9 和 Swift2 中使用 Parse 登录 Facebook

iOS Facebook 登录按钮与 swift