ios - 从函数返回数据 (Swift)

标签 ios swift facebook-sdk-4.0

我正在尝试返回结果并能够从此函数访问结果数组。一切都在函数中工作,但是我不能返回任何东西或访问结果或从闭包外部在函数内部创建的任何变量。我想从闭包外部访问 result.valueForKey("id") 。我该怎么做?

class ViewController: UIViewController, FBSDKLoginButtonDelegate {

var facebookid: NSString = ""
var username: NSString = ""
var userEmail:NSString = ""

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

    if (FBSDKAccessToken.currentAccessToken() == nil)
    {
        let loginView : FBSDKLoginButton = FBSDKLoginButton()
        self.view.addSubview(loginView)
        loginView.center = self.view.center
        loginView.readPermissions = ["public_profile"]
        loginView.delegate = self

    } else {

        returnUserData()

        println(facebookid)  // This doesn't work

    }
}



    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
        {

            self.facebookid = result.valueForKey("id") as NSString!
            self.username = result.valueForKey("name") as NSString!
            self.userEmail = result.valueForKey("email") as NSString!
            println(result) // This works


        }
    })
}

编辑:我确实根据下面的 2 个答案更改了代码,但我仍然无法在 viewDidLoad 闭包上获得任何数据返回。 * println(facebookid) 在 ViewDidLoad 中不返回任何内容,而在函数的闭包内返回任何内容。

最佳答案

您在闭包内创建变量意味着它们只能在内部访问。

您需要在类的顶部在函数外部创建变量。

例如

 class YourClassName {

      var facebookid
      var username
      var userEmail


 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
    {
        self.facebookid = result.valueForKey("id") as? String
        self.userName = result.valueForKey("name") as? String
        self.userEmail = result.valueForKey("email") as? String

    }
  })
 }
}

关于ios - 从函数返回数据 (Swift),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29561511/

相关文章:

ios - 没有这样的模块 'FBSDKCoreKit' XCODE 7.4

ios - Cocoapods,无法使用 pod setup 和 pod install

ios - 可以在我的自定义 View 下与 View 交互

swift - 从 GMSAutocompleteResultsViewController 选择位置时显示 segue(以编程方式)

ios - 背景图片未加载到设备上

TableView 中的 Facebook 好友列表 : Think need Async Programming?

php - 检查是否已经使用 PHP SDK 4.0 登录到 facebook

facebook-login - 带有 FBSDKLoginBehaviorWeb 的 FBSDKLoginManager 失败并出现 "Not Logged In"错误

android - 从移动应用程序到计算机的数据传输

iphone - AVAudioRecorder 如何在 iphone 中获得麦克风电平?