当前位置: 首页 > 面试题库 >

通过Swift命令行程序使用NSURLSession

巢德华
2023-03-14
问题内容

在集成到更大的应用程序之前,我正在尝试测试一个概念验证的命令行应用程序。我想要做的是使用此示例使用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时如何通过? 问题答案: 扩展了Richard Cook的答案。 这是运行任何程序(包括但不限于Java程序)的任务: 这是从文件运行Java程序的任务: 您可以像这样从命令行调用: 确保使用语法;如果运行此命令: 然后将尝试运行目标和。

  • 我将Spring Boot应用程序打包为可执行JAR。应用程序有一个带有main方法的实用程序类,我想通过命令行调用它,但命令似乎无法在类路径中找到该类。

  • 一些注意事项: 1。我最初使用的TestNG jar来自java项目中的maven repo。下面的所有方法都是用maven testNG jar和新的TestNG6.9.12下载进行测试的。 2。我可以从Eclipse中运行这个文件。只有当我尝试从命令行运行时才有问题。 3。最终目标是通过javafx应用程序按钮触发命令行来运行测试。如果提供的解决方案避免在cmd中键入绝对路径,因为应用程序将在

  • 我有一个spring启动应用程序,我需要通过进入文件夹目录并通过命令行启动我的web应用程序来启动它。我有一门课叫应用。java及其内部代码如下所示。 我设置了类路径,然后试图运行命令"",但我得到了这个错误消息""

  • 问题内容: 有人可以帮我实现以下服务器和客户端吗? 服务器: 所有服务器所做的就是从套接字扫描命令并将其通过套接字发送给客户端。然后扫描客户端响应并将其输出到。 客户端: 本质上,客户端接收服务器扫描的命令,使用执行该命令,并逐行发送命令行的内容,直到。 问题是代码在第一个命令之后突然停止工作。命令的传输和命令的输出是令人满意的,但是在打印第一个命令的输出后,程序只是停止工作。我认为是有问题,但是

  • 问题内容: 如何捕捉到不同的信号,如和斯威夫特是否正确?例如,当人们通过按- 停止我的脚本时,我想在终止脚本之前进行一些清理。 问题答案: 调度源 可用于监视UNIX信号。 这是一个简单的示例,《 并发编程指南 》中“监视信号”部分中C代码的Swift 3转换 。 请注意,这需要一个活动的GCD事件循环,例如 在命令行程序中。