我在swift中使用Facebook API,我希望在异步函数FBSDKGraphRequest
结果准备就绪时抓住。
我使用此功能从Facebook返回数据
func returnUserData()
{
let graphRequest : FBSDKGraphRequest = FBSDKGraphRequest(graphPath: "me", parameters: nil)
graphRequest.startWithCompletionHandler({ (connection, result, error) -> Void in
if ((error) != nil)
{
// Process error
println("Error: \(error)")
}
else
{
let userName : String = result.valueForKey("name") as! String
self.userFB = userName
}
})
}
答案 0 :(得分:3)
如果你在谷歌周围,你会发现许多完成处理程序和闭包的例子。以下是对代码的简单修改,以便在完成时返回结果。
func returnUserData(completion:(result:String)->Void)
{
let graphRequest : FBSDKGraphRequest = FBSDKGraphRequest(graphPath: "me", parameters: nil)
graphRequest.startWithCompletionHandler({ (connection, result, error) -> Void in
if ((error) != nil)
{
// Process error
println("Error: \(error)")
}
else
{
let userName : String = result.valueForKey("name") as! String
completion(result:userName)
}
})
}
现在在主代码中,您可以像下面这样调用此函数:
returnUserData({(result)->Void in
self.userFB = result
//CONTINUE RUNNING THE APP WITH OTHER METHODS OR FUNCTIONS
continueDoingSomething()
})
所以你正在做的是,在获得FB用户ID之后,你只会继续在你的应用程序中执行其他操作,而不会真正冻结后面的主线程。有很多有效的方法可以做到这一点,谷歌搜索和阅读这个主题将有所帮助。