【问题标题】:Getting values from Facebook FBSDK iOS 4.x (with Swift)?从 Facebook FBSDK iOS 4.x(使用 Swift)获取价值?
【发布时间】:2016-02-05 11:15:30
【问题描述】:

如何让所有函数在访问 facebookData 变量之前稍等片刻?由于网络调用是异步的,因此 facebookData 在从 Facebook 获取值之前被访问。

请从信息中找到以下代码。

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)
    }

【问题讨论】:

    标签: ios swift facebook closures fbsdk


    【解决方案1】:

    由于我找到了适合我的情况的解决方案,因此我将在此处发布以供阅读,并可能对其发表评论以进一步改进。

    这里的简单解决方案是使用属性观察器并在属性更改后立即调用一个函数。无需弄乱线程或使用信号量。

    解决方案代码现在如下所示:-

    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 变量被设置为一个值;从class facebookUserSignUpLogIn 调用函数checkUserExistsOrNot() 以进行进一步操作。

    【讨论】:

      猜你喜欢
      • 2015-07-30
      • 2019-03-22
      • 1970-01-01
      • 1970-01-01
      • 2019-08-15
      • 1970-01-01
      • 2015-01-02
      • 2015-06-10
      • 1970-01-01
      相关资源
      最近更新 更多