当前位置: 首页 > news >正文

swift中利用系统线程实现异步加载数据同步更新UI

swift中的使用案例样式

// Mark: -数据源更新

    typealias AddDataBlock = () ->Void

    var updataBlock:AddDataBlock?

 

func loadLiveData(){

        let grpup = DispatchGroup()

        grpup.enter()

        //        //首页直播接口请求

        HomeLiveProvider.request(.liveList) { result in

            if case let .success(response) = result {

                //解析数据

                let data = try? response.mapJSON()

                let json = JSON(data!)

                if let mappedObject = JSONDeserializer<HomeLiveModel>.deserializeFrom(json: json.description) { // 从字符串转换为对象实例

                    self.lives = mappedObject.data?.lives

                    self.categoryVoList = mappedObject.data?.categoryVoList

//                    self.collectionView.reloadData()

                    // 更新tableView数据

//                    self.updataBlock?()

                    grpup.leave()

                }

            }

        }

        

        grpup.enter()

        //        //首页直播滚动图接口请求

        HomeLiveProvider.request(.liveBannerList) { result in

            if case let .success(response) = result {

                //解析数据

                let data = try? response.mapJSON()

                let json = JSON(data!)

                if let mappedObject = JSONDeserializer<HomeLiveBanerModel>.deserializeFrom(json: json.description) { // 从字符串转换为对象实例

                    self.homeLiveBanerList = mappedObject.data

                    //                    let index: IndexPath = IndexPath.init(row: 0, section: 1)

                    //                    self.collectionView.reloadItems(at: [index])

                    // 更新tableView数据

//                    self.updataBlock?()

                    grpup.leave()

                }

            }

        }

        

        

        

        grpup.enter()

        //        //首页直播排行榜接口请求

        HomeLiveProvider.request(.liveRankList) { result in

            if case let .success(response) = result {

                //解析数据

                let data = try? response.mapJSON()

                let json = JSON(data!)

                if let mappedObject = JSONDeserializer<HomeLiveRankModel>.deserializeFrom(json: json.description) { // 从字符串转换为对象实例

                    self.multidimensionalRankVos = mappedObject.data?.multidimensionalRankVos

                    //                    let index: IndexPath = IndexPath.init(row: 0, section: 2)

                    //                    self.collectionView.reloadItems(at: [index])

                    // 更新tableView数据

//                    self.updataBlock?()

                    grpup.leave()

                }

            }

        }

        

        grpup.notify(queue: DispatchQueue.main) {

            self.updataBlock?()

        }

    }

 

oc中的使用样式

 

//一个并发队列

    dispatch_queue_t queueE = dispatch_queue_create("group.queue", DISPATCH_QUEUE_CONCURRENT);

    

    //一个线程组

    dispatch_group_t groupE = dispatch_group_create();

    1.请求轮播图的数据

    dispatch_group_async(groupE, queueE, ^{

        dispatch_group_enter(groupE);

        dispatch_async(dispatch_get_global_queue(0, 0), ^{

            

            [self requestCarousel:^{

                dispatch_group_leave(groupE);

            }];

        });

        

    });

    2.请求新闻轮播图的数据

    dispatch_group_async(groupE, queueE, ^{

        

        dispatch_group_enter(groupE);

        dispatch_async(dispatch_get_global_queue(0, 0), ^{

            

            [self requestNews:^{

                dispatch_group_leave(groupE);

            }];

        });

        

    });

    3.校园活动【师生展评】

    dispatch_group_async(groupE, queueE, ^{

        

        dispatch_group_enter(groupE);

        dispatch_async(dispatch_get_global_queue(0, 0), ^{

            

            //3.校园活动【师生展评】

            [self requestCampAcitivetis:^{

                dispatch_group_leave(groupE);

            }];

            

        });

        

    });

    

    4.尾部视图

    dispatch_group_async(groupE, queueE, ^{

        

        dispatch_group_enter(groupE);

        dispatch_async(dispatch_get_global_queue(0, 0), ^{

            

            //3.尾部视图

            [self requestClass:^{

                dispatch_group_leave(groupE);

            }];

            

        });

        

    });

    dispatch_group_notify(groupE, dispatch_get_main_queue(), ^{

        //staticWeakSelf 随情况而定

        [staticWeakSelf setUpUI];

        

    });

 

 

//1.请求轮播图的数据

- (void)requestCarousel:(void(^)(void))leveBlock{

  

 [AFHTTPRequestManager reqesutSuccess{

    

  

  if (leveBlock) {

            leveBlock();

        }

  } requestFaliure{

    

  if (leveBlock) {

            leveBlock();

        }

  }

}

转载于:https://www.cnblogs.com/sundaysme/p/10612919.html

相关文章:

  • T56
  • pyqt5的下载进度条 实现模板
  • 用servlet校验密码2
  • PHP 生成唯一订单号函数
  • SSE图像算法优化系列二十九:基础的拉普拉斯金字塔融合用于改善图像增强中易出现的过增强问题(一)...
  • Confluence 6 LDAP 服务器配置
  • tp5.0中及其常用方法的一些函数方法(自己看)和技巧(不断添加中)
  • SpringBoot 从application.yml中通过@Value读取不到属性值
  • python开发环境
  • 网页排版布局--从里到外先搞定结构
  • 常见的Web安全及其攻防姿势
  • 利益相关者分析
  • 长春网站建设×××,网站制作的步骤
  • spring boot @ConfigurationProperties vs @Value
  • ABAP的include关键字,Java的import, C的include和C4C ABSL 的import比较
  • (三)从jvm层面了解线程的启动和停止
  • Android组件 - 收藏集 - 掘金
  • ES6之路之模块详解
  • go append函数以及写入
  • Javascript 原型链
  • jdbc就是这么简单
  • Python_OOP
  • 不用申请服务号就可以开发微信支付/支付宝/QQ钱包支付!附:直接可用的代码+demo...
  • 动态魔术使用DBMS_SQL
  • 分布式任务队列Celery
  • 后端_ThinkPHP5
  • 记一次删除Git记录中的大文件的过程
  • 聊聊flink的BlobWriter
  • 聊聊sentinel的DegradeSlot
  • 排序算法之--选择排序
  • 前嗅ForeSpider教程:创建模板
  • 设计模式走一遍---观察者模式
  • 在 Chrome DevTools 中调试 JavaScript 入门
  • 终端用户监控:真实用户监控还是模拟监控?
  • raise 与 raise ... from 的区别
  • UI设计初学者应该如何入门?
  • 专访Pony.ai 楼天城:自动驾驶已经走过了“从0到1”,“规模”是行业的分水岭| 自动驾驶这十年 ...
  • ​Linux·i2c驱动架构​
  • #{}和${}的区别?
  • #git 撤消对文件的更改
  • #pragma预处理命令
  • (09)Hive——CTE 公共表达式
  • (14)目标检测_SSD训练代码基于pytorch搭建代码
  • (c语言版)滑动窗口 给定一个字符串,只包含字母和数字,按要求找出字符串中的最长(连续)子串的长度
  • (pytorch进阶之路)扩散概率模型
  • (Redis使用系列) SpirngBoot中关于Redis的值的各种方式的存储与取出 三
  • (附源码)ssm考生评分系统 毕业设计 071114
  • (企业 / 公司项目)前端使用pingyin-pro将汉字转成拼音
  • (转载)(官方)UE4--图像编程----着色器开发
  • (最优化理论与方法)第二章最优化所需基础知识-第三节:重要凸集举例
  • .NET CF命令行调试器MDbg入门(二) 设备模拟器
  • .NET 常见的偏门问题
  • .NET 服务 ServiceController
  • .net和php怎么连接,php和apache之间如何连接
  • .w文件怎么转成html文件,使用pandoc进行Word与Markdown文件转化