[Swift通天遁地]四、网络和线程-(8)下载图片并实时显示下载进度

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公众号:山青咏芝(shanqingyongzhi)
➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/
➤GitHub地址:https://github.com/strengthen/LeetCode
➤原文地址:https://www.cnblogs.com/strengthen/p/10222721.html 
➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。
➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

目录:[Swift]通天遁地Swift

本文将演示下载网络图片,显示下载进度,并保存在沙箱目录中。

首先确保在项目中已经安装了所需的第三方库。

点击【Podfile】,查看安装配置文件。

1 source 'https://github.com/CocoaPods/Specs.git'
2 platform :ios, '12.0'
3 use_frameworks!
4 
5 target ‘DemoApp’ do
6     pod 'Alamofire', '~> 4.0'
7 end

根据配置文件中的相关配置,安装第三方库。

然后点击打开【DemoApp.xcworkspace】项目文件。

在项目导航区,打开视图控制器的代码文件【ViewController.swift】

现在开始编写代码,实现一个简单的功能:下载一个文件,并将该文件存储在沙箱中。

 1 import UIKit
 2 //在当前的类文件中,引入已经安装的第三方类库
 3 import Alamofire
 4 
 5 class ViewController: UIViewController {
 6     //视图加载完成的方法
 7     override func viewDidLoad() {
 8         super.viewDidLoad()
 9         // Do any additional setup after loading the view, typically from a nib.
10         //简单的图片下载功能
11         simpleDownload()
12 
13         //实时显示下载进度的图片下载功能
14         complexDownload()
15     }
16     
17     //添加一个方法,
18     //通过访问服务器的接口,下载并保存一个文本文件
19     func simpleDownload()
20     {
21         //初始化一个下载请求对象,并设置下载后的存储目录,位于沙箱的文档目录中。
22         let destination = DownloadRequest.suggestedDownloadDestination(
23             for: .documentDirectory,
24             in: .userDomainMask
25         )
26         //在控制台输出沙箱中的文档目录,
27         //使用这条日志信息,进入该目录并查看下载后的文件。
28         print(NSHomeDirectory()+"/Documents")
29         
30         //调用网络操作库的下载方法,下载指定的服务器接口,
31         //并将下载后的文件存储在指定的目录中。
32         let result = Alamofire.download("https://httpbin.org/stream/1", to: destination)
33         //控制台输出结果
34         print(result)
35     }
36     
37     //添加一个方法,
38     //实现一个可实时显示下载进度的图片下载功能
39     func complexDownload()
40     {
41         //初始化一个下载请求对象,并设置下载后的存储目录,位于沙箱的文档目录中。
42         let destination = DownloadRequest.suggestedDownloadDestination(
43             for: .documentDirectory,
44             in: .userDomainMask
45         )
46         
47         //还可以设置服务器接口的请求参数
48         let parameters: Parameters = ["foo": "bar"]
49         
50         //调用网络操作库的下载方法,下载指定的服务器接口,
51         //并将下载后的文件存储在指定的目录中。
52         Alamofire.download("http://images.apple.com/v/home/cx/images/gallery/iphone_large_2x.jpg", 
53                             method: .get, 
54                             parameters: parameters,
55                             encoding: JSONEncoding.default,
56                             to: destination)
57             //通过一个下载进度方法块,处理图片下载的事件
58             .downloadProgress(queue: DispatchQueue.global())
59             {
60                 progress in
61                 //在控制台输出:进度的完成比例
62                 print("Progress1: (progress.fractionCompleted)")
63                 //在控制台输出:已经下载的字节数
64                 print("Progress2: (progress.completedUnitCount)")
65                 //在控制台输出:全部的字节数
66                 print("Progress3: (progress.totalUnitCount)")
67             }
68             //完成的图片的下载后执行验证方法,此处返回成功标识
69             .validate { request, response, temporaryURL, destinationURL in
70                 return .success
71             }
72             //处理图片下载后的返回信息
73             .responseJSON { response in
74                 //在控制台输出:网络返回对象
75                 debugPrint("response:(response)")
76                 //在控制台输出:图片下载临时存放的位置
77                 print("response.temporaryURL:(response.temporaryURL)")
78                 //在控制台输出:下载后的存储位置
79                 print("response.destinationURL:(response.destinationURL)")
80             }
81     }
82 
83     override func didReceiveMemoryWarning() {
84         super.didReceiveMemoryWarning()
85         // Dispose of any resources that can be recreated.
86     }
87 }
原文地址:https://www.cnblogs.com/strengthen/p/10222721.html