如何异步下载URL数组作为字符串

时间:2017-07-12 20:24:31

标签: swift nsurlsession

我的目标是将一系列网址(例如,25个网址)下载为字符串,并在网址全部下载完毕后进行报告。

目前,我可以从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)
            }
        }
    }
}

虽然我意识到我可以轻松地将我的网址打包到一个数组中,但我的难点在于让该流程报告当数据的所有网址被下载时(或者有错误&#39) ;编辑)。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:0)

快捷方式

NSNotifications

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

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

正确的方式

竞赛处理程序

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