swift - 如何以字符串形式异步下载 URL 数组

标签 swift nsurlsession

我的目标是以字符串形式下载一组 URL(例如 25 个 URL),并在 URL 全部下载完成时进行报告。

目前,我能够成功从 1 个网页下载,配置如下:

override func viewDidLoad() {
    super.viewDidLoad()
    let url = URL(string: "https://www.apple.com")
    self.downloadWebpage(url: url!)
}

func getDataFromUrl(url: URL, completion: @escaping (_ data: Data?, _  response: URLResponse?, _ error: Error?) -> Void) {
    URLSession.shared.dataTask(with: url) { (data, response, error) in
        completion(data, response, error)
        if error != nil {
            print (error.debugDescription)
        }
    }.resume()
}

func downloadWebpage(url: URL) {
    getDataFromUrl(url: url) { (data, response, error)  in
        guard let data = data, error == nil else { return }
        print(response?.suggestedFilename ?? url.lastPathComponent)
        print("Download Finished")
        print (data)
        DispatchQueue.main.async() { () -> Void in
            if let returnData = String(data: data, encoding: .utf8) {
                print (returnData)
            }
        }
    }
}

虽然我意识到我可以轻松地将 URL 打包到数组中,但我的困难在于如何让进程报告当数组中的所有 URL 都已下载(或者出现错误)时出去)。如有任何帮助,我们将不胜感激。

最佳答案

快捷方式

NSNotifications

您设置了一个通知,以便在下载完成时触发,然后在应用程序的其他位置监听该通知。

这篇文章解释了如何做; https://blog.bobthedeveloper.io/pass-data-with-nsnotification-in-swift-3-73743723c84b

正确的方法

竞赛处理者

https://thatthinginswift.com/completion-handlers/

关于swift - 如何以字符串形式异步下载 URL 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45066886/

相关文章:

swift - 当 NSURLSession 完成它的工作时转到另一个 View

ios - (iOS)后台运行下载任务

ios - NSURLSession 辅助类

ios - UICollectionView 数组索引超出范围

ios - UICollectionViewDelegateFlowLayout Edge Insets 未被 sizeForItemAt 函数识别?

ios - Swift:无法设置 StatusBarStyleLightContent

ios - UIView不可见时截图

ios - 如何在 swift 5 中从另一个 Controller 重新加载 UIViewController

ios - 如何让 NSURLSession 以一定的间隔重复?

ios - URLSession 缓存甚至在应用重启后