SwiftUI学习笔记之异步数据请求

方法一

方法描述:

结合使用 ObservableObject @Published @ObservedObject

  • ObservableObject

定义自己的Model时,实现该协议

  • @Published

在需要变更通知的属性上标记, 可以在属性值变化时, 通知到异步框架

  • @ObservedObject

在定义自定义Model的属性的时候, 给Model加上此标记, 异步框架会订阅此对象的所有通知(即被标记为 @Published 的所有属性)

示例代码

import SwiftUIimport Combineclass TextCache: ObservableObject {@Published var text: String?func clear() {self.text = nil}func updateText() {/// 这里使用异步延时模拟网络请求DispatchQueue.global().asyncAfter(deadline: DispatchTime.now().advanced(by: .seconds(1))) {DispatchQueue.main.async {self.text = Date().description(with: Locale(identifier: "zh-CN"))}}}
}struct ContentView: View {@ObservedObject var cache: TextCache = TextCache()var body: some View {VStack {Text(cache.text ?? "等待更新时间").frame(width: 300,height: 44,alignment: .center)Button(action: {self.cache.updateText()}) {Text("点击更新时间")}Button(action: {self.cache.clear()}) {Text("清除时间")}}.cornerRadius(8).border(Color(.gray))}
}

代码说明

  • 首先定义了一个TextCache的Model, 和这个Model具有一个字符串类型的text属性
  • TextCache实现 ObservableObject协议, 并为text属性标记@Published的属性修饰(@PropertyWrapper, 是Swift 5.1引入的新特性),表示这个属性的变化会想异步框架发出对应的通知
  • 在自己的视图中, 定义好TextCache这个Model作为视图的一个属性,并标记上 @ObservedObject的属性修饰, 表示这个Model的所有通知都会被异步框架订阅
  • 在需要使用到TextCache的text属性的地方,直接使用即可(此处的text属性由于设定的是可选值, 所以用了 ?? 来放置一个默认的值)

效果

  • 界面初始显示:

    • 一行文本:等待更新时间
    • 两个按钮: 更新时间, 清除时间
  • 界面交互效果
    • 点击更新时间, 1s后第一行文本变为当前的系统时间
    • 点击清除时间, 第一行文本恢复 ‘等待更新时间’

方法二

未完待续…

SwiftUI学习笔记之异步数据请求相关推荐

  1. 微信小程序开发:学习笔记[9]——本地数据缓存

    微信小程序开发:学习笔记[9]--本地数据缓存 快速开始 说明 本地数据缓存是小程序存储在当前设备上硬盘上的数据,本地数据缓存有非常多的用途,我们可以利用本地数据缓存来存储用户在小程序上产生的操作,在 ...

  2. IC学习笔记3——异步FIFO

    IC学习笔记3--异步FIFO 异步FIFO的工作内容与同步FIFO类似,但是异步FIFO的控制并不像同步FIFO那么简单,因为异步FIFO工作在不同的时钟域,这将会带来一些问题,比如空满检测?是否还 ...

  3. Python学习笔记:异步IO(3)

    前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...

  4. Python学习笔记:异步IO(2)

    前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...

  5. oracle数据库开多线程,学习笔记:Oracle表数据导入 DBA常用单线程插入 多线程插入 sql loader三种表数据导入案例...

    天萃荷净 oracle之数据导入,汇总开发DBA在向表中导入大量数据的案例,如:单线程向数据库中插入数据,多线程向数据表中插入数据,使用sql loader数据表中导入数据案例 1.Oracle数据库 ...

  6. Vue学习笔记入门篇——数据及DOM

    本文为转载,原文:Vue学习笔记入门篇--数据及DOM 数据 data 类型 Object | Function 详细 Vue 实例的数据对象.Vue 将会递归将 data 的属性转换为 getter ...

  7. html中的异步请求数据格式,解决layui中table异步数据请求不支持自定义返回数据格式的问题...

    使用版本 layui-v2.3.0 修改: 打开layui中table.js源码 在 Class.prototype.pullData 这个方法定义内部 //获得数据 Class.prototype. ...

  8. js异步请求php数据,原生JS发送异步数据请求实例详解

    这篇文章主要为大家详细介绍了原生JS发送异步数据请求的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 在做项目的时候,有时候需要用到异步数据请求,但是如果这个时候没有框架的依赖,就需要用到 ...

  9. vs2010 学习Silverlight学习笔记(11):数据与通信之WebClient

    概要: 基础知识终于学完了,我今天又从第一篇看到第十篇,发现明白了一些东西,还有忘记了部分东西.呵呵,咱不能猴子掰玉米,学了新的忘记旧的.要经常去复习,去用.这一篇是数据通信部分的第一篇,有些东西没接 ...

最新文章

  1. Codeforces Round #643 (Div. 2)题解
  2. [欧拉路]CF1152E Neko and Flashback
  3. oracle夜未眠之一增删改查
  4. Ubuntu 17.04 Chrome 安装
  5. 关于收到部分还款SAP系统两种处理方法的说明和比较
  6. networkx 画有权图_利用NetworkX画网络图
  7. Jmeter+Ant+Jenkins接口自动化持续集成环境搭建(Linux)
  8. spring jpa.踩坑经验分享
  9. 使用wampserver部署的织梦站点无法登录后台
  10. qq群管+引流+娱乐机器人
  11. isPostback 的原理及作用(非常简单)
  12. 关于一起疑似脚本注入安全事件过程记录
  13. 马化腾教你做产品:改掉这七点,让产品自己说话
  14. 对象的copy和自动归档Archive操作
  15. 调查 ESXi/ESX 上的虚拟机文件锁定 (10051)
  16. ECMAScript 语法
  17. Android模拟器的判定
  18. Android进程保活、拉活方案
  19. 这个企业邮箱登陆入口更快捷
  20. 虹科教您|实现OPC UA C/S快速部署及数据采集

热门文章

  1. 【Unity3D游戏开发】之多语言缩写对应表 (十五)
  2. 微博、视频号中奖名单新鲜出炉!
  3. Symfony 官方文档 第 1 章 1 - Symfony介绍
  4. 跳出弹窗页面禁止滚动(PC端和手机端)
  5. iCloud的功能以及如何从Windows访问它
  6. 给Lumia 520/521/525/526/720刷Android系统
  7. PHP验证身份证、获取身份证信息
  8. 《乖,摸摸头》经典语录
  9. C/C++编程学习 - 第12周 ③ 判断数正负
  10. 十个最危险的cmd命令