Swift等待异步返回

时间:2015-08-06 09:50:37

标签: ios facebook swift facebook-graph-api

我在swift中使用Facebook API,我希望在异步函数FBSDKGraphRequest结果准备就绪时抓住。

我使用此功能从Facebook返回数据

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
        {
            let userName : String = result.valueForKey("name") as! String
            self.userFB = userName
        }
    })
}

1 个答案:

答案 0 :(得分:3)

如果你在谷歌周围,你会发现许多完成处理程序和闭包的例子。以下是对代码的简单修改,以便在完成时返回结果。

func returnUserData(completion:(result:String)->Void)
{
    let graphRequest : FBSDKGraphRequest = FBSDKGraphRequest(graphPath: "me", parameters: nil)
graphRequest.startWithCompletionHandler({ (connection, result, error) -> Void in

    if ((error) != nil)
    {
        // Process error
        println("Error: \(error)")
    }
    else
    {
        let userName : String = result.valueForKey("name") as! String
        completion(result:userName)
    }
})
}

现在在主代码中,您可以像下面这样调用此函数:

returnUserData({(result)->Void in 
  self.userFB = result
  //CONTINUE RUNNING THE APP WITH OTHER METHODS OR FUNCTIONS
  continueDoingSomething()
})

所以你正在做的是,在获得FB用户ID之后,你只会继续在你的应用程序中执行其他操作,而不会真正冻结后面的主线程。有很多有效的方法可以做到这一点,谷歌搜索和阅读这个主题将有所帮助。