osx – 从Swift命令行程序中使用NSURLSession

我试图在将它集成到一个更大的应用程序之前,先测试一些概念验证的命令行应用程序.我想要做的是使用 this example使用NSURLSession下载一些数据.但是,如果我使用简单的OS X命令行应用程序中给出的示例,似乎应用程序在数据被检索之前退出.

如何使用NSURLSession从独立的命令行应用程序下载数据?我读过的是使用NSRunLoop,但是我还没有在Swift中找到一个明确的例子,所以如果NSRunLoop实际上是要走的路,那么任何的例子都不会感激.

从Swift命令行应用程序的URL下载数据的任何其他策略也是受欢迎的(无限循环?).

您可以使用信号量来阻止当前线程,并等待您的URL会话完成.

创建信号量,启动您的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()

相关文章

软件简介:蓝湖辅助工具,减少移动端开发中控件属性的复制和粘...
现实生活中,我们听到的声音都是时间连续的,我们称为这种信...
前言最近在B站上看到一个漂亮的仙女姐姐跳舞视频,循环看了亿...
【Android App】实战项目之仿抖音的短视频分享App(附源码和...
前言这一篇博客应该是我花时间最多的一次了,从2022年1月底至...
因为我既对接过session、cookie,也对接过JWT,今年因为工作...