使用GCD从本地/服务器加载数据并在Tableview中显示
要从本地/服务器文件加载数据,应具备swift知识,iOS App开发,View-controller和tableview的知识。这篇文章将分为两部分,第一部分我们在本地获取数据,第二部分将从服务器获取数据。逐步指导
- 我们将首先设置项目,只有一个视图控制器包含一个表视图,我们还将创建一个名为DataLoader的单独服务,该服务将从本地文件或服务器获取数据,为简化起见,全班将遵循单例模式
2.在ViewController.swift中,我们将设置IBOutlets,并将其设置为tableview的数据源。
在viewWillApper中,我们调用getNames函数,该函数将依次调用DataLoader服务函数getNamesFromServer / getNames,此函数需要一个完成块,因此我们向其传递PopulateTable函数
3. PopulateTable我们检查是否成功请求,如果不是,则输出错误,如果成功,则从收到的响应中设置名称,并在tableview上调用reload
4.将txt文件添加到您的项目中,其中一些名称以json格式显示
5.在DataLoader.swift中,我们创建一个函数getNames
首先,我们获得文件的路径,该文件在本地添加,然后将其转换为URL的实例,并初始化名称数组
6.我们将优先级设置为后台的DispatchQueue.global称为异步后台程序,我们将其称为并发后台队列,因为我们不知道加载数据将花费多少时间,直到那时我们无法停止执行主线程这样做,我们的应用似乎会挂在二手设备上,给用户带来缓慢的用户体验
7.我们将url的内容转换为DATA对象,然后使用JSONSerialization类将其反序列化,然后转换为json对象
8.我们将把这个json对象解析为字典(因为这样做了)并提取名称(在数组中一个接一个地添加它们)
9.我们现在将在Main队列上调用完成处理程序,因为任何UI更改都必须在主队列上进行,否则应用程序将崩溃(或发生意外行为),或者如果上述任何步骤失败,我们将使用调用完成处理程序成功=错误
10.运行应用
5在DataLoader.swift中,我们创建函数getNamesFromServer
我们创建一个URL对象,获得URLSession.shared会话,然后使用刚创建的url启动dataTask
6.我们检查是否获取了数据,如果我们从服务器接收到数据,我们将以与第1部分相同的方式进行处理,并相应地调用完成处理程序
7.运行应用
很少有问题需要回答
Q1 @转义是什么?
答:我们希望完成对象不在函数getNames / getNamesFromServer的范围内,因此我们使用@escaping表示法来告诉编译器相同的对象
Q2为什么我们在Part2中不使用DispathQueue.global?
答:我们没有用相同的方法创建后台队列,因为URLSession自己处理它,它在内部剪切后台队列以发出http请求,我们只需要处理主队列即可。
Q3我们从哪里获得此服务器?
A.上有一个网站http://jsonplaceholder.typicode.com/可以访问此网站以获取不同类型的Json数据