使用GCD从本地/服务器加载数据并在Tableview中显示

要从本地/服务器文件加载数据,应具备swift知识,iOS App开发,View-controller和tableview的知识。这篇文章将分为两部分,第一部分我们在本地获取数据,第二部分将从服务器获取数据。逐步指导

  1. 我们将首先设置项目,只有一个视图控制器包含一个表视图,我们还将创建一个名为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数据