本文介绍: 一个课程设计,用喜马拉雅的SDK来开发一个在线听书软件笔记没写完就开发完了。做纪念用

喜马拉雅IOS开发笔记

  1. 由于我的课程设计做的比较简单至少是现在做得计较简单, 现在我已经接入成功了,所以SDK接入教程可能会在后续做笔记

  2. 在官方给出的SDK中有一个demo使用OC写的,我们demo接入自己的开发者认证账号 运行项目
    在这里插入图片描述

运行结果如上, 似乎功能还很多 我们现在想要自己用storyborad+swift来写的话 就要查看源码

1. Viewcontroller

  1. 我们找到源码中 用OC写的Viewcontroller,并找到对应代码

在这里插入图片描述

这是存储数组中的字符串用于页面展示, 我们接着往下找

在这里插入图片描述

这里我们可以看到 demo中给出的参数字典包含了 四个键值对分别是

一、 params字典

  1. category_id => 0 应该分类id
  2. count => 20 应该是是接收数据
  3. page => 1 因该是页面
  4. q => 思维 应该搜索关键字

二、 requestXmData => XMRqeType_SearchAlbums

这个参数一个枚举类中一个类别 具体的枚举类 在SDK中 Unity 包中的 XMSDKInfo 类中

这时我们一直藏在心底的疑问得到了解答,请求数据一般因该有一个接口呀,尽管我们把关键字这些封装在了字典里面,但是没有目标接口,SDK给我们的不是直接的接口而是枚举请求类型

例如 XMRqeType_SearchAlbums 表示我们请求数据是专辑列表,所以我们得到的数据将是专辑级别数据

在这里插入图片描述

请求参数当然有返回值了

  1. result 应该就是返回
  2. error 应该就是反馈错误信息

接下来 程序进行了是否出错的判断这里我们先讨论没有出错的情况下

  1. 没有出错的条件下 它调用showReciveData方法(应该就是展示数据了)

  2. 这个方法有三个参数

    1. result 我们得到的反馈数据
    2. className => XMAlbum(专辑)
    3. valuePath => albums
    4. titleNeedShow => albumTitle

    对OC有一些认识的应该明白 参数给的是自己定死的字符串,并不是请求回传的数据里面的数

ViewcontrollershowReciveData 方法

接下来我们进入方法showReciveData

在这里插入图片描述

程序一开始就定义了一个可变数组NSMutableArray

NSMutableArray基本概念 – iFat – 博客园 (cnblogs.com)

第二行相当于通过字符串实体化一个类 (类似Java反射)

那么这个类在哪呢 传入的className 是 “XMAlbum”

在SDK中的model实体类中 有这个对象 在给出的开发者文档中也对这个类有阐述

在这里插入图片描述

好长的model

我们考虑不出错的境况下 进入语句

在这里插入图片描述

在这里插入图片描述

重点在这句, 我们将 result 就是我们得到的专辑级别的数据,与 dataClass(专辑实体类),数据进行一一映射,形成一个专辑类型数组可以说至此我们的数据从网络数据转化成了model(专辑实体类),这句程序我们后面还会再次提到,很神奇(我的OC没学好)

随后 在跳转页面之前 把model(专辑实体类)赋予了array

在这里插入图片描述

页面跳转 所以我们进入页面控制器GerneralTableViewController里面看看

2. GerneralTableViewController 控制

在这里插入图片描述

对应的页面

在这个类中属性 果然有 这两个之前传入的值

在这里插入图片描述

我们来到具体的实现方法

在这里插入图片描述

这个方法就是展示一行数据的逻辑代码了 相当于一个循环

我们可以indexPath.row理解当前行的数据的编号(索引)

model就是这一行的数据了,每个专辑有自己的titile 这样就可是实现数据展示

图片加载设置

https://blog.csdn.net/panjican/article/details/51314307

3. didSelectRowAtIndexPath

至此,我们实现了专辑列表展示,可能大家会有疑问,专辑下面还有声音列表呀。官方把这些业务代码写在了didSelectRowAtIndexPath方法里面

进入方法,就是array[0]数据的类型判断,我们直接进入第二个分支

    //如果类型数据类型已经到了album类型
    else if ([self.array[0] isKindOfClass:[XMAlbum class]])
    {
        //把当前点击的目标(专辑)初始化成对象
        XMAlbum *album = self.array[indexPath.row];
        
        NSLog(@"-------------进入XMAlbum判断------------------");
        NSLog(@"%@", self.array[0]);
        NSMutableDictionary *params = [NSMutableDictionary dictionary];
        
        //判断是否付费
        //在我们没有第三方登录之前这个分支不会执行
        //isPaid: -1 - 无此属性;0 - 免费专辑;1 - 付费专辑
        if (album.isPaid) {
            ...
        }
        
        //封装参数
        [params setObject:@(album.albumId) forKey:@"album_id"];
        [params setObject:@20 forKey:@"count"];
        [params setObject:@1 forKey:@"page"];
        
        [[XMReqMgr sharedInstance] requestXMData:XMReqType_AlbumsBrowse params:params withCompletionHander:^(id result, XMErrorModel *error) {
            [sself showReceivedData:result className:@"XMTrack" valuePath:@"tracks" titleNeedShow:@"trackTitle"];
        }];
    }

我们可以看到 我们在页面上点击了一个专辑后,会生成另一个请求

一、params 参数字典

  1. album_id => album.albumId
  2. count => 20
  3. page =>

二、 请求类型

requestXMData => XMReqType_AlbumsBrowse

[外链图片转存失败,源站可能有防盗链机制,建议图片保存下来直接上传(img-IkzZGJs7-1673928551968)(C:UsersputhmarsAppDataRoamingTyporatyporauserimagesimage-20220430185429679.png)]

三、总结

这就是用专辑ID进行请求声音列表,回传的数据也肯定是XMTrack类型的数据(数组

接下来程序又转到了方法showReceivedData

4. showReceivedData

这个方法之前讲过,这里不过是在这个控制里面又重新写过一遍,所以请大家注意各个参数传入的是啥

通过之前的讲解大家肯定也会明白,这个方法产生的model已经不是专辑了,而是声音(XMTrack数组

接着又将页面和models推到了GerneralTableViewController , 这次我们的table列表展示的数据就是根据我们点击的专辑的ID,得到的声音(XMTrack)列表,

我们再次进入方法 didSelectRowAtIndexPath,这次执行分支分支

//如果数据已经是XMTrack类型了
    else if([self.array[0] isKindOfClass:[XMTrack class]])
    {
        //直接实例化了播放页面控制
        PlayingViewController *playingViewController = [[PlayingViewController alloc] init];
        
        //页面之间传值
        playingViewController.track = self.array[indexPath.row];
        NSLog(@"-------------进入播放页------------------");
        NSLog(@"%@", self.array[0]);
        playingViewController.trackList = self.array;
        NSLog(@"%@", self.array);
        //跳转
        [self.navigationController pushViewController:playingViewController animated:YES];
    }
	//下面的不考虑 如果大家想要接入下面的内容,思想也大差不差
    //如果数据已经是XMRadio类型了
    else if([self.array[0] isKindOfClass:[XMRadio class]]){
        ...
    }
    //如果数据已经是XMRadioSchedule类型了
    else if ([self.array[0] isKindOfClass:[XMRadioSchedule class]]){
        ...
    }

激动人心的时刻到了,我们实例化了播放控制器,并且把当前点击的XMTrack数据和整个专辑的Track都传入了播放页

大概是为了实现上一曲下一曲的功能

5. PlayingViewController

end

原文地址:https://blog.csdn.net/weixin_46053210/article/details/128714485

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。

如若转载,请注明出处:http://www.7code.cn/show_11155.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注