Swift 以错误顺序执行的代码
我的代码以错误的顺序运行。Swift 以错误顺序执行的代码,swift,Swift,我的代码以错误的顺序运行。aerror是在开头打印的,应该在结尾打印 这是我的密码 var aerror :Int? NSURLConnection.sendAsynchronousRequest(NSURLRequest(URL: url), queue: NSOperationQueue.mainQueue(), completionHandler: { (res, data, error) -> Void in let str = NSString(data: da
aerror
是在开头打印的,应该在结尾打印
这是我的密码
var aerror :Int?
NSURLConnection.sendAsynchronousRequest(NSURLRequest(URL: url), queue: NSOperationQueue.mainQueue(), completionHandler: { (res, data, error) -> Void in
let str = NSString(data: data!, encoding: NSUTF8StringEncoding)
print("\n********\nData\n*******")
print(str)
print("\n********\nData\n*******")
let json = JSON(data: data!)
aerror = json["Logon"]["error"].int!
print("\n********\njson\n*******")
print(json)
print("\n********\njson\n*******")
})
print("\n********\naeeror=\(aerror)")
这是输出
我不知道为什么要先打印
错误。
我想在返回之前打印a错误
。
谁能帮我修一下吗 NSURLConnection.sendAsynchronousRequest
将启动一个异步请求。这意味着在调用它的那一刻无法判断它何时完成,一旦调用它,将执行下一个语句
异步请求完成后,将运行您传递给它的方法(completionHandler)
简单地说,正在发生的是:
->调用sendAsynchronousRequest
(使用completionhandler)
->print(“\n*********\naeeror=\(aerror)”)
(异步请求正在后台运行)
->异步请求完成
->completionHandler
已执行
因为您在完成处理程序中分配了一个错误,所以您也可以从完成处理程序中打印它
var aerror :Int?
NSURLConnection.sendAsynchronousRequest(NSURLRequest(URL: url), queue: NSOperationQueue.mainQueue(), completionHandler: { (res, data, error) -> Void in
let str = NSString(data: data!, encoding: NSUTF8StringEncoding)
print("\n********\nData\n*******")
print(str)
print("\n********\nData\n*******")
let json = JSON(data: data!)
aerror = json["Logon"]["error"].int!
print("\n********\njson\n*******")
print(json)
print("\n********\njson\n*******")
print("\n********\naeeror=\(aerror)")
})
一切正常。。。
NSURLConnection.sendAsynchronousRequest方法名称发送一个Asynchronows请求,该请求带有一个完成处理程序,该处理程序将在收到响应后执行。
您的代码实际做的是:
创建请求
send it在不同的线程上移动“发送”、“等待”和“管理响应(这意味着运行完成处理程序)”的整个过程
主线程上的打印错误
这意味着一旦调用sendAsynchronousRequest,程序就不会等待它完成并执行compltion处理程序,而是继续运行并打印“aerror”。这就是异步的全部目的
如果希望主线程在继续执行之前等待完成处理程序的终止,我建议使用信号量或方法
sendSynchronousRequest(_:returningResponse:)
无论如何,您应该使用NSURLSession而不是NSURLConnection,因为最后一个已不推荐使用。这不是错误,而是功能;-)SendAsynchronousRequest如果您想更好地理解异步与同步,请看这里:我想返回一个错误,您能告诉我如何使用NSURLSession同步处理它吗?非常感谢你!
sendSynchronousRequest(_:returningResponse:)