EnvironmentObject的学习与使用
程序员文章站
2024-03-24 12:37:28
...
- EnvironmentObject修饰属性是当前的环境变量,并在它自己以及它的子视图都可以直接使用,也可以叫做当前当前视图全局变量。
import SwiftUI
class Student: ObservableObject {
@Published var name = ""
}
struct UseEnvironmentObjectView: View {
let student = Student()
var body: some View {
VStack(alignment: .leading) {
EditStudentView()
.frame(width: 300, height: 40)
.border(Color.black,width: 1)
.padding()
.environmentObject(student)
DisplayStudentView()
.frame(width: 300, height: 40, alignment: .leading)
.border(Color.black, width: 1)
.padding()
.environmentObject(student)
Spacer()
}
}
}
struct EditStudentView: View {
@EnvironmentObject var user: Student
var body: some View {
TextField("请输入学生姓名:",text:$user.name)
}
}
struct DisplayStudentView: View {
@EnvironmentObject var user: Student
var body: some View {
Text("学生姓名:\(user.name)")
}
}
struct UseEnvironmentObjectView_Previews: PreviewProvider {
static var previews: some View {
UseEnvironmentObjectView()
}
}
代码分析:
EditStudentView
和DisplayStudentView
两个视图之间并没有直接的关系,但是他们都是UseEnvironmentObjectView
的子视图,而且他们两个都是获取的UseEnvironmentObjectView
的变量,这样在环境变量中就只有一份内容,所以才会在编辑的时候能及时的显示出姓名。
下面转载一个博客的一段话:
-
@State
和@ObservableObject
之间有一些细微的差异。这些都是很重要的,因为它们都有不同的用途。
-
@State
在视图本地。值或数据在视图中本地保存。它由框架管理,由于它存储在本地,因此它是一个值类型。 -
@ObservableObject
在视图外部,并且不存储在视图中。它是一种引用类型,因为它不在本地存储,而只是具有对该值的引用。这不是由框架自动管理的,而是开发人员的责任。这最适用于外部数据,例如数据库或由代码管理的模型。
-
@Binding
也在视图内,但是与@State
区别在于@Binding
用于不通视图之间的参数传递。@Binding
和@ObservedObbject
一样都是传递引用。 -
@EnvironmentObject
可以理解为全局变量
上一篇: iOS 部分基本设备信息的获取
推荐阅读
-
EnvironmentObject的学习与使用
-
深度学习框架的评估与比较 博客分类: 深度学习
-
深度学习框架的评估与比较 博客分类: 深度学习
-
Javase学习记录之------一维数组的基础使用
-
Git 客户端的安装与使用
-
Cognos安装与配置(使用自带的数据库derby+服务器Tomcat) 博客分类: WEB DerbyTomcatEXTIEJDK
-
while 与 do...while 的区别和使用方法
-
应用原型的制作与原型制作工具的使用 PowerBuilderSybase软件测试数据挖掘Web
-
SVN学习 博客分类: SVN更新的时候前面的U与G是什么意思?
-
SVN学习 博客分类: SVN更新的时候前面的U与G是什么意思?