如何让所有函数在访问 facebookData 变量之前等待一会儿?由于网络调用是异步的,因此在从 Facebook 获取值之前会先访问 facebookData。
请从资料中找到以下代码。
func graphRequestToReturnUserData(graphParameters: Dictionary<String, String>) {
let graphRequest : FBSDKGraphRequest = FBSDKGraphRequest(graphPath: "me", parameters: graphParameters)
graphRequest.startWithCompletionHandler({ (connection, result, error) -> Void in
if ((error) != nil) {
print("Error: \(error.localizedDescription)") /*Error Handling*/
}else {
self.facebookData = result as! NSDictionary
}
})
}
我不想像这样调用该函数:-
if ((error) != nil) {
print("Error: \(error.localizedDescription)") /*Error Handling*/
}else {
self.facebookData = result as! NSDictionary
self.printFacebookData()
}
})
}
func printFacebookData() {
print(self.facebookData)
}
最佳答案
由于我找到了一个适合我的情况的解决方案,我将把它发布在这里以供更多阅读,并可能对其进行评论以进一步改进。
这里的简单解决方案是使用属性观察器并在属性更改后立即调用函数。无需搞乱线程或使用信号量。
解决方案代码现在如下所示:-
class facebookGraphRequest {
static var facebookData = NSDictionary()
//Property Observer, willSet-didSet
var facebookD = NSDictionary() {
didSet {
facebookGraphRequest.facebookData = facebookD //Assigning values to the static class variable
facebookUserSignUpLogIn().checkUserExistsOrNot() //Calling a function from the other class
}
}
//Mark: GraphRequestForFetchingUserData
func graphRequestToReturnUserData(graphParameters: Dictionary<String, String>) {
let graphRequest : FBSDKGraphRequest = FBSDKGraphRequest(graphPath: "me", parameters: graphParameters)
graphRequest.startWithCompletionHandler({ (connection, result, error) -> Void in
if ((error) != nil) {
print("Error: \(error.localizedDescription)") //Error Handling
} else {
self.facebookD = result as! NSDictionary
}
})
}
}
这里,第一部分是属性观察器( willSet-didSet ),然后是用于获取用户数据的 GraphAPI 调用。很快 facebookD
变量就被设置为一个值;从类 facebookUserSignUpLogIn 调用函数 checkUserExistsOrNot()
以执行进一步操作。
关于ios - 从 Facebook FBSDK iOS 4.x(使用 Swift)获取值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35222775/