如何在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