如何在swift中返回asynchronous内部函数中的外部函数?

我正在创build一个swift类,它包含一个validation用户是否为true的函数。 但是,由于dataTaskWithRequest函数是asynchronous执行的,因此即使结果为true, userVerifyResult也将始终返回“false”。 我怎样才能解决这个问题?

 class userLibService: NSObject{ func VerifyUser() -> String{ var userVerifyResult = "false" var url = NSURL(string: "http://www.example.com/test.php")! var request = NSMutableURLRequest(URL: url) request.HTTPMethod = "POST" var bodyData = "username=tee&password=123&data=true" request.HTTPBody = bodyData.dataUsingEncoding(NSUTF8StringEncoding) let task = NSURLSession.sharedSession().dataTaskWithRequest(request){ data, response, error in var parseError: NSError? if let json = NSJSONSerialization.JSONObjectWithData(data, options: nil, error: &parseError) as? [String : String] { if(json["valid"]! == "true"){ userVerifyResult = "true" }else{ userVerifyResult = "false" } } } task.resume() return userVerifyResult } } 

在我的主要程序中:

 var test = userLibService() println(test.VerifyUser()) 

即使用户名和密码为真也会返回“false”

使用完成处理程序,正如苹果在其框架中所做的那样:

 func verifyUser(completionHandler: ((result: Bool)->())) { 

然后通过返回结果

  if(json["valid"]! == "true"){ completionHandler(result: true) }else{ completionHandler(result: false) } 

然后调用它

 verifyUser { (result) -> () in println(result) } 

没有办法阻止NSURLSessionDataTask (我知道的),直到你返回函数,所以它不可能这样做。 您必须在任务完成处理程序中进行callback,以便打印结果或将打印委托给其他function