SwiftUI学习笔记之异步数据请求
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学习笔记之异步数据请求相关推荐
- 微信小程序开发:学习笔记[9]——本地数据缓存
微信小程序开发:学习笔记[9]--本地数据缓存 快速开始 说明 本地数据缓存是小程序存储在当前设备上硬盘上的数据,本地数据缓存有非常多的用途,我们可以利用本地数据缓存来存储用户在小程序上产生的操作,在 ...
- IC学习笔记3——异步FIFO
IC学习笔记3--异步FIFO 异步FIFO的工作内容与同步FIFO类似,但是异步FIFO的控制并不像同步FIFO那么简单,因为异步FIFO工作在不同的时钟域,这将会带来一些问题,比如空满检测?是否还 ...
- Python学习笔记:异步IO(3)
前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...
- Python学习笔记:异步IO(2)
前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...
- oracle数据库开多线程,学习笔记:Oracle表数据导入 DBA常用单线程插入 多线程插入 sql loader三种表数据导入案例...
天萃荷净 oracle之数据导入,汇总开发DBA在向表中导入大量数据的案例,如:单线程向数据库中插入数据,多线程向数据表中插入数据,使用sql loader数据表中导入数据案例 1.Oracle数据库 ...
- Vue学习笔记入门篇——数据及DOM
本文为转载,原文:Vue学习笔记入门篇--数据及DOM 数据 data 类型 Object | Function 详细 Vue 实例的数据对象.Vue 将会递归将 data 的属性转换为 getter ...
- html中的异步请求数据格式,解决layui中table异步数据请求不支持自定义返回数据格式的问题...
使用版本 layui-v2.3.0 修改: 打开layui中table.js源码 在 Class.prototype.pullData 这个方法定义内部 //获得数据 Class.prototype. ...
- js异步请求php数据,原生JS发送异步数据请求实例详解
这篇文章主要为大家详细介绍了原生JS发送异步数据请求的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 在做项目的时候,有时候需要用到异步数据请求,但是如果这个时候没有框架的依赖,就需要用到 ...
- vs2010 学习Silverlight学习笔记(11):数据与通信之WebClient
概要: 基础知识终于学完了,我今天又从第一篇看到第十篇,发现明白了一些东西,还有忘记了部分东西.呵呵,咱不能猴子掰玉米,学了新的忘记旧的.要经常去复习,去用.这一篇是数据通信部分的第一篇,有些东西没接 ...
最新文章
- Codeforces Round #643 (Div. 2)题解
- [欧拉路]CF1152E Neko and Flashback
- oracle夜未眠之一增删改查
- Ubuntu 17.04 Chrome 安装
- 关于收到部分还款SAP系统两种处理方法的说明和比较
- networkx 画有权图_利用NetworkX画网络图
- Jmeter+Ant+Jenkins接口自动化持续集成环境搭建(Linux)
- spring jpa.踩坑经验分享
- 使用wampserver部署的织梦站点无法登录后台
- qq群管+引流+娱乐机器人
- isPostback 的原理及作用(非常简单)
- 关于一起疑似脚本注入安全事件过程记录
- 马化腾教你做产品:改掉这七点,让产品自己说话
- 对象的copy和自动归档Archive操作
- 调查 ESXi/ESX 上的虚拟机文件锁定 (10051)
- ECMAScript 语法
- Android模拟器的判定
- Android进程保活、拉活方案
- 这个企业邮箱登陆入口更快捷
- 虹科教您|实现OPC UA C/S快速部署及数据采集