我试图在将它集成到一个更大的应用程序之前,先测试一些概念验证的命令行应用程序.我想要做的是使用
this example使用NSURLSession下载一些数据.但是,如果我使用简单的OS X命令行应用程序中给出的示例,似乎应用程序在数据被检索之前退出.
如何使用NSURLSession从独立的命令行应用程序下载数据?我读过的是使用NSRunLoop,但是我还没有在Swift中找到一个明确的例子,所以如果NSRunLoop实际上是要走的路,那么任何的例子都不会感激.
从Swift命令行应用程序的URL下载数据的任何其他策略也是受欢迎的(无限循环?).
您可以使用信号量来阻止当前线程,并等待您的URL会话完成.
原文链接:/swift/319627.html创建信号量,启动您的URL会话,然后等待信号量.从您的URL会话完成回调中,发出信号.
您可以使用一个全局标志(声明一个volatile布尔变量),并从while循环中进行轮询,但这不太优化.首先,你不必要地烧cpu周期.
这是一个使用操场的例子:
import Foundation var sema = DispatchSemaphore( value: 0 ) class Delegate : NSObject,URLSessionDataDelegate { func urlSession(_ session: URLSession,dataTask: URLSessionDataTask,didReceive data: Data) { print("got data \(String(data: data,encoding: .utf8 ) ?? "<empty>")"); sema.signal() } } let config = URLSessionConfiguration.default let session = URLSession(configuration: config,delegate: Delegate(),delegateQueue: nil ) guard let url = URL( string:"http://apple.com" ) else { fatalError("Could not create URL object") } session.dataTask( with: url ).resume() sema.wait()