我的 Xcode 7 项目有一个关于 Facebook 的问题。 当尝试通过图形请求检索我的数据时,函数 returnUserData 完成得太晚了?
//...
returnUserData()
print("finished")
//...
这是函数:
func returnUserData() {
let graphRequest : FBSDKGraphRequest = FBSDKGraphRequest(graphPath: "me", parameters: ["fields": "id, name, first_name, last_name, email"])
graphRequest.startWithCompletionHandler({ (connection, result, error) -> Void in
if error == nil
{
//print("fetched user: \(result)")
print("start");
self.username = result.valueForKey("name") as! NSString
//NSUserDefaults.standardUserDefaults().setObject(self.username, forKey: "name")
//NSUserDefaults.standardUserDefaults().synchronize()
print("1: " + (self.username as String))
}
else if (error != nil)
{
// Process error
print("Error: \(error)")
}
})
}
但这就是,发生了什么,看看顺序:
finished
start
1: My Name
如何防止这种情况发生?
最佳答案
那是因为 graphRequest.startWithCompletionHandler
调用是异步的。如果您在代码中的 returnUserData()
和 print("finished")
处放置断点,您将在执行 graphRequest.startWithCompletionHandler
后看到,该函数将立即返回到 print("finished") 语句,并且完成处理程序中的语句不会执行(在调用 graphRequest.startWithCompletionHandler 之后立即执行)。
为了正确处理它,您可以在completionHandler中编写处理代码[例如:print("finished")
],或者编写一个回调函数,您可以在之后将数据传递给该回调函数处理/验证服务器响应。
关于facebook - Xcode7 swift函数需要多少时间?比赛条件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34099936/