ios - 从 Facebook FBSDK iOS 4.x(使用 Swift)获取值?

标签 ios swift facebook closures fbsdk

如何让所有函数在访问 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/

相关文章:

ios - 3D Touch 快速操作根本不起作用

swift - 如何快速表示 IOS 不支持的字母

node.js - Bottender - 在 facebook 上启用 persist_menu 和 get_started 按钮

ruby-on-rails - 如何在使用 devise 和 omniauth-facebook 时指定 facebook 图形 API 版本

ios - 通过使用 JSON 的 POST 从 NSURLSession 取回数据

ios - 无法在 ScrollView 中缩放 UIImage

ios - 如何让带有按钮的 UIViewController 在每次加载时工作,而不是每次加载时都工作

ios - 向左/向右滑动或将表格 View 拉出屏幕时,单元格动画停止

xcode - 如何使用 swift xcode 访问 Mac 默认摄像头

javascript - Facebook 的 react.js——对象不是函数