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

前端之家收集整理的这篇文章主要介绍了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()
原文链接:/swift/319627.html

猜你在找的Swift相关文章