Facebook graph api 异步Web服务调用的调度队列

Facebook graph api 异步Web服务调用的调度队列,facebook-graph-api,swift3,grand-central-dispatch,Facebook Graph Api,Swift3,Grand Central Dispatch,我正在调用Facebook Graph API以获取通过Facebook登录到我的应用程序的用户的电子邮件、Facebook ID和姓名 我成功地获得了信息;我现在尝试使用分派组,以便调用graph的函数在返回之前等待graph API调用完成。图形请求是异步的 我不明白为什么这个代码会被锁定 1) 创建调度组 2) 输入所述显示组 3) 一旦检索到信息或发现错误,请离开该组 4) 等待团队离开后再返回 似乎我的调度组enter调用不正确,但我不知道为什么 class func getFBInf

我正在调用Facebook Graph API以获取通过Facebook登录到我的应用程序的用户的电子邮件、Facebook ID和姓名

我成功地获得了信息;我现在尝试使用分派组,以便调用graph的函数在返回之前等待graph API调用完成。图形请求是异步的

我不明白为什么这个代码会被锁定

1) 创建调度组

2) 输入所述显示组

3) 一旦检索到信息或发现错误,请离开该组

4) 等待团队离开后再返回

似乎我的调度组enter调用不正确,但我不知道为什么

class func getFBInformation()->Bool {
    var fbResult = false

    let fbGraphGroup = DispatchGroup()

    fbGraphGroup.enter()

    FBSDKGraphRequest(graphPath: "/me", parameters: ["fields": "id, name, email"]).start { (connection, result, err) in
        if err != nil {
            fbResult = false
            print("Pre Error Signal")
            fbGraphGroup.leave()
            return
        }

        if let resultDict = result as? [String:AnyObject] {
            <Do things with graph results>

            print("Pre success signal")
            fbResult = true
            fbGraphGroup.leave()
        }
    }

    fbGraphGroup.wait()
    print("Post signal")

    return fbResult
}
class func getFBInformation()->Bool{
var fbResult=false
设fbGraphGroup=DispatchGroup()
fbGraphGroup.enter()
FBSDKGraphRequest(graphPath:“/me”,参数:[“字段”:“id、名称、电子邮件”])。在中启动{(连接、结果、错误)
如果错误!=零{
fbResult=false
打印(“错误前信号”)
fbGraphGroup.leave()
返回
}
如果let resultdct=结果为?[字符串:AnyObject]{
打印(“成功前信号”)
fbResult=true
fbGraphGroup.leave()
}
}
fbGraphGroup.wait()
打印(“Post信号”)
返回结果
}
它是如何工作的? 首先进入组,然后等待主线程完成处理程序,直到它离开组。但是,完成处理程序无法在主线程上执行以离开组

据我所知,您的完成处理程序是由API在主队列上调度的。不需要使用任何其他类型的同步