gpt4 book ai didi

Swift:如何同步下载?

转载 作者:行者123 更新时间:2023-11-30 10:01:59 25 4
gpt4 key购买 nike

我正在使用以下代码来下载一些文件:

    let url = NSURL(string:"https://www.example.org/")!
let task = NSURLSession.sharedSession().dataTaskWithURL(url) { (data, response, error) in
if error != nil {
NSLog("%@", "Error: \(error)");
return
}

NSLog("Loaded %i bytes", data!.length)
}
task.resume()

我想处理一些文件并在下载后退出我的应用程序。因此我需要知道下载过程何时完成。最好的是,如果有一种方法可以同步执行此操作(没问题,如果 UI 被阻止 - 它只是一个带有进度条的闪屏)。但据我经过一番研究后了解这个主题,这在 Swift 中不再可能了......

我确实将此代码包装在一个函数中,因此我不能只在 NSLog 语句后添加一些代码。我需要知道的是:最后一个文件什么时候完成下载?我怎样才能检索这些信息?

编辑:这段代码确实对我有用(但要注意,它已被弃用!):

    // download file synchonously ////////////////////////////////////////////////////
func downloadSync(fromURL: String, toPath: String) {
let request = NSURLRequest(URL: NSURL(string: fromURL)!)
var response: NSURLResponse?
do {
let data = try NSURLConnection.sendSynchronousRequest(request, returningResponse: &response)
data.writeToFile(toPath, atomically: true)
} catch {
print("Error while trying to download following file: " + fromURL)
}
}

最佳答案

调用task.resume()后,下载开始。

当下载完成(或收到错误)时,代码在 { } 内调用以下 dataTaskWithURL。这是一个闭包,并且被异步调用。

let task = NSURLSession.sharedSession().dataTaskWithURL(url) { (data, response, error) in
// This code is executed asynchronously after data has been received
}
task.resume()

在闭包内你会收到 3 个参数:

  1. data:您请求的NSData
  2. 响应:整个 NSURLResponse
  3. 错误:一个 NSError 对象

这 3 个值是可选的,因此可能是 nil

E.g. error could be populated and data could be nil.

同步方式[iOS 9中已弃用]

此方法在 iOS 9 中已被弃用,您不应该使用它,但是这里是代码

var response: NSURLResponse?
var error: NSError?
let urlData = try NSURLConnection.sendSynchronousRequest(request, returningResponse: &response)

关于Swift:如何同步下载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37978773/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com