ios - 无法使用图形 API 返回闭包的输出

标签 ios swift facebook-graph-api

如果我调用此方法来获取 Facebook 个人资料图片,它不起作用,响应会与数据一起打印,但是当我返回它时它为零,有人可以帮忙吗?

func getProfilePicture() -> NSData?{
    var response:NSData?

    let graphRequest : FBSDKGraphRequest = FBSDKGraphRequest(graphPath: "me", parameters: ["fields":"picture.type(large)"])
    graphRequest.startWithCompletionHandler({ (connection, result, error) -> Void in

        if error != nil {
            print("login error: \(error!.localizedDescription)")
            return
        }

        let json = JSON(result)
        let profilePicture = json["picture"]["data"]["url"].stringValue

        if let url = NSURL(string: profilePicture) {
            if let pictureData = NSData(contentsOfURL: url){
                response = pictureData
            }
        }

    })
    print(response)
    return response
}

最佳答案

Facebook 调用使用异步完成 block ,您的返回语句将在调用加载完成之前返回 nil。这就是为什么您还应该在您的方法中使用完成 block 。

这是一个如何做到这一点的例子:

    func getProfilePicture(completion: (pictureData: NSData?, error: NSError?) -> Void) {

    let graphRequest : FBSDKGraphRequest = FBSDKGraphRequest(graphPath: "me", parameters: ["fields":"picture.type(large)"])
    graphRequest.startWithCompletionHandler({ (connection, result, error) -> Void in

        var pictureData: NSData?

        let json = JSON(result)
        let profilePicture = json["picture"]["data"]["url"].stringValue

        if let url = NSURL(string: profilePicture) {
            pictureData = NSData(contentsOfURL: url)
        }

        completion(pictureData: pictureData, error: error)
    })
}

你可以这样调用这段代码:

        self.getProfilePicture {(pictureData, error) -> Void in

        if error != nil {
            print("login error: \(error!.localizedDescription)")
        }

        print(pictureData)
    }

关于ios - 无法使用图形 API 返回闭包的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33903374/

相关文章:

ios - UIActivityViewController为WhatsApp或Facebook选择了不同的文本

Swift - 打印时来自组件的日期不正确。日期有 2 个值?

Facebook Graph API 发布带有页面墙链接的消息

Swift flatMap 链展开

swift - Firestore 对 Order By 的查询无效?

javascript - 发布操作 : no more ID in error message when error. 代码等于 3501

ASP.NET Facebook 图形 API

ios - 如何进行多线程以更快地将图像加载到tableView?

ios - Swift 4 中的 UIImagePickerController 内存泄漏 Xcode 9

ios - UITapGestureRecognizer 双击减慢释放