如何从头开始创建iTunes Samples Player? (第2部分)

注意:这是“如何从头开始创建iTunes Samples Player? (第1部分)”。

此部分根据应用程序的功能分为两部分。

  1. 能够执行搜索并将结果显示为列表。
  2. 能够下载示例歌曲并播放。

为了实现这个目标,我们需要完成以下任务。

  1. 在搜索栏上输入搜索关键字后,知道何时点击“搜索”按钮。
  2. 根据搜索关键字启动“ URLSessionDataTask”。
  3. 响应到来后,解析它并将其转换为字典。
  4. 使用字典填充tableView。

解决方案1.1 :创建“ SearchViewController”的扩展名,以使该扩展名充当搜索栏的委托。 选择“添加新文件”选项,然后选择“快速”文件。 将其命名为“ SearchViewController + SearchBarDelegate”。 该代码的第一个版本如下所示:

解决方案1.2。 我们需要创建一个新的swift类,该类将启动URLSessionDataTask,解析响应数据,然后根据解析的数据创建模型对象的集合。 一旦成功完成,该模型将被传递给View,以填充tableView。

这也意味着我们需要在项目中添加一个模型类以保存跟踪信息。 该类看起来像下面的那个。 将其添加到“模型”组下的项目中。

SearchViewController将如下所示:

该版本的源代码在GitHub中。

下一个目标是实际下载声音文件,然后在选择行时播放它。 让我们清理TrackCell中的configure方法,以便隐藏“暂停”按钮,“取消”按钮,ProgressView和“进度”标签。 我们稍后将取消隐藏它们。

让我们看看如何实现下载机制。 以下是高级任务:
2.1 —单击下载按钮后,应用程序应找到必须从中下载文件的URL,然后开始下载。

2.2 —下载结束后,应使用文件在本地可用的事实来更新模型对象。 另外,下载按钮应该被隐藏。

2.3 —如果在下载完成后用户点击该行,则应播放该文件。

2.1的解决方案:下载按钮位于单元格上。 这意味着我们需要使用委托模式来处理下载按钮的点击。 我们将在TrackCell中定义一个协议,并在其中声明一个委托变量。

在TrackCell中编辑代码,以包括协议定义和委托变量。 同样,当点击“下载”按钮时,必须有一个被调用的函数。

现在,我们将在’SearchViewController’上有一个新扩展,它将作为TrackCell的委托。 首先,将只有一个委托方法触发下载。 但是,随着时间的流逝,我们那里将有更多的方法。 将其命名为“ SearchViewController + TrackCellDelegate”

下一步是向Networking组添加一个新类,该类负责文件下载过程。 将其命名为“ DownloadService”。

控制台日志显示本地文件路径。

为了播放下载的文件,您需要找到下载文件的本地文件路径,然后将该localURL传递给AVPlayer实例。 进行以下更改以处理行选择事件。

在委托方法处理部分的SearchViewController + TableViewDelegate中添加以下代码。

该版本的源代码位于此GitHub中。

在第3部分中,我们将重点介绍下载进度指示以及“暂停,恢复和取消下载”选项。