通过Swift命令行程序使用NSURLSession
在集成到更大的应用程序之前,我正在尝试测试一个概念验证的命令行应用程序。我想要做的是使用此示例使用NSURLSession下载一些数据。但是,如果使用简单的OS
X命令行应用程序中给出的示例,则该应用程序将在检索数据之前退出。
如何使用NSURLSession从独立的命令行应用程序下载数据?我所读的内容是使用NSRunLoop,但是我还没有在Swift中找到明确的示例,因此,如果NSRunLoop实际上是可行的方法,那么任何示例都将不胜感激。
也欢迎任何其他从Swift命令行应用程序从URL下载数据的策略(无限while循环吗?)。
-
您可以使用信号量来阻止当前线程,并等待URL会话结束。
创建信号灯,启动您的URL会话,然后等待该信号灯。从您的URL会话完成回调中,发出信号量。
您可以使用全局标志(声明一个易失的布尔变量)并从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()
-
使用Ant通过命令行参数运行程序
2021-01-31 关注 0 浏览215 1答案
-
怎么使用 SpringBoot 去执行命令行程序?
2020-07-11 关注 0 浏览625 1答案
-
使用命令行文件输入从IntelliJ运行程序
2021-01-30 关注 0 浏览90 1答案
-
从python中执行命令行程序
2022-04-11 关注 0 浏览21 1答案
-
从python内部执行命令行程序
2021-01-29 关注 0 浏览104 1答案
-
解析Java命令行程序的参数
2021-01-30 关注 0 浏览90 1答案
-
Java执行命令行程序'find'返回错误
2021-01-29 关注 0 浏览102 1答案
-
在Swift命令行应用程序中捕获信号
2021-01-31 关注 0 浏览71 1答案
-
Web应用程序框架以调用命令行程序
2021-02-01 关注 0 浏览126 1答案
-
Spring Boot命令行运行程序正在使用Windows默认字符编码
2021-02-02 关注 0 浏览86 1答案