在一个swift 2命令行工具(main.swift)中,我有以下代码:
import Foundation
print("yay")
var request = HTTPTask()
request.GET("http://www.stackoverflow.com", parameters: nil, completionHandler: {(response: HTTPResponse) in
if let err = response.error {
print("error: \(err.localizedDescription)")
return //also notify app of failure as needed
}
if let data = response.responseObject as? NSData {
let str = NSString(data: data, encoding: NSUTF8StringEncoding)
print("response: \(str)") //prints the HTML of the page
}
})
控制台显示“yay”,然后退出(程序结束,退出代码:0),似乎从来没有等待请求完成。我该如何防止这种情况发生?
代码使用swiftHTTP
我想我可能需要一个NSRunLoop,但没有快速的示例
7条答案
按热度按时间jslywgbw1#
将
RunLoop.main.run()
添加到文件末尾是一种选择。gajydyqb2#
我知道这是一个老问题,但这里是我最后的解决方案。使用DispatchGroup。
csga3l583#
你可以在main的末尾调用
dispatchMain()
。这会运行GCD主队列调度程序,并且永远不会返回,因此它会阻止主线程退出。然后你只需要显式调用exit()
,在你准备好的时候退出应用程序(否则命令行应用程序会挂起)。tvokkenx4#
不要看时机你应该试试这个
shstlldc5#
如果您的需求不是需要“生产级”代码的东西,而是一些 * 快速试验或试用代码 *,您可以这样做:
SWIFT 3
更多信息:https://stackoverflow.com/a/40870157/469614
请注意,您不应依赖架构中的固定执行时间。
jtoj6r0c6#
雨燕4:
RunLoop.main.run()
在文件的末尾
yzuktlbb7#
第一个