加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-14 05:34:23 所属栏目:百科 来源:网络整理
导读:我试图在将它集成到一个更大的应用程序之前,先测试一些概念验证的命令行应用程序.我想要做的是使用 this example使用NSURLSession下载一些数据.但是,如果我使用简单的OS X命令行应用程序中给出的示例,似乎应用程序在数据被检索之前退出. 如何使用NSURLSessio
我试图在将它集成到一个更大的应用程序之前,先测试一些概念验证的命令行应用程序.我想要做的是使用 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()

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读