@State

@State属性允许你修改Struct的属性,这些属性在普通的Struct里面是不允许修改的。通过使用@State修饰器我们可以关联出 View 的状态. SwiftUI 将会把使用过 @State 修饰器的属性存储到一个特殊的内存区域,并且这个区域和 View struct 是隔离的. 当 @State 装饰过的属性发生了变化,SwiftUI 会根据新的属性值重新创建视图。

建议把@State包装的属性都设置成私有

@State private var username = ""

@Binding

有时候我们会把一个视图的属性传至子节点中,但是又不能直接的传递给子节点,因为在 Swift 中值的传递形式是值类型传递方式,也就是传递给子节点的是一个拷贝过的值。但是通过 @Binding 修饰器修饰后,属性变成了一个引用类型,传递变成了引用传递,这样父子视图的状态就能关联起来了。

struct ContentView: View {@State private var showingAddUser = falsevar body: some View {VStack {}}.sheet(isPresented: $showingAddUser) {AddView(isPresented: self.$showingAddUser)}
}struct AddView: View {@Binding var isPresented: Boolvar body: some View {Button("Dismiss") {self.isPresented = false}}
}

@ObservedObject

@ObservedObject 的用处和 @State 非常相似,从名字看来它是来修饰一个对象的,这个对象可以给多个独立的 View 使用。如果你用 @ObservedObject 来修饰一个对象,那么那个对象必须要实现 ObservableObject 协议,也就是说必须是class对象,不能是struct。然后用 @Published 修饰对象里属性,表示这个属性是需要被 SwiftUI 监听的

class Order: ObservableObject {@Published var items = [String]()
}struct ContentView: View {@EnvironmentObject var order: Ordervar body: some View {}
}

@Published

@Published 允许我们创建出能够被自动观察的对象属性,SwiftUI会自动监视这个属性,一旦发生了改变,会自动修改与该属性绑定的界面。首先需要遵循ObservableObject属性,所以必须是 class ,不能是Struct

class Order: ObservableObject {@Published var items = [String]()
}

@EnvironmentObject

从名字上可以看出,这个修饰器是针对全局环境的。通过它,我们可以避免在初始 View 时创建 ObservableObject, 而是从环境中获取 ObservableObject

class Order: ObservableObject {@Published var items = [String]()
}struct ContentView: View {@EnvironmentObject var order: Ordervar body: some View {}
}

@Environment

SwiftUI 本身就有很多系统级别的设定,我们可以通过 @Environment 来获取到它们

    @Environment(\.calendar) var calendar: Calendar@Environment(\.locale) var locale: Locale@Environment(\.colorScheme) var colorScheme: ColorScheme@Environment(\.horizontalSizeClass) var horizontalSizeClass@Environment(\.managedObjectContext) var managedObjectContext

SwiftUI:属性装饰器的理解@State,@Binding,@ObservedObject,@Published,@Environment,@EnvironmentObject相关推荐

  1. 技术图文:Python的属性装饰器详解

    背景 我们在以前的一篇图文 Python基础 – Task10. 类与对象 中介绍过利用property()方法既能保护类的封装特性,又能让开发者可以使用"对象.属性"的方式操作类 ...

  2. python装饰器类-Python 装饰器、类装饰器、属性装饰器

    今天来介绍一下python的装饰器. 1.首先来介绍一下简单的装饰器, def play(): return "i can play" if __name__ == '__main ...

  3. 手机怎么安装py thon_Python属性装饰器– Py​​thon @property

    手机怎么安装py thon Hello friends, today we will learn about Python property decorator. In our previous tu ...

  4. CocosCreator之属性装饰器

    @property属性装饰器.可通过编辑器对脚本属性做调整. 下方是常用类型的列举: const { ccclass, property } = cc._decorator; export enum ...

  5. python装饰器哪个好_[Python] 对 Python 装饰器的理解心得

    最近写一个py脚本来整理电脑中的文档,其中需要检校输入的字符,为了不使代码冗长,想到使用装饰器. 上网搜索有关python的装饰器学习文档,主要看的是AstralWind的一篇博文,以及Limodou ...

  6. 【Python面向对象编程】第18篇 属性装饰器

    本篇我们学习 Python 属性装饰器(@property)的原理. 属性装饰器 在上一篇中,我们介绍了如何利用 property 类定义类的属性.property 类的调用语法如下: propert ...

  7. TypeScript系列教程十一《装饰器》 -- 属性装饰器

    系列教程 TypeScript系列教程一<开篇> TypeScript系列教程二<安装起步> TypeScript系列教程三<基础类型> TypeScript系列教 ...

  8. Python(三)对装饰器的理解

    装饰器是 Python 的一个重要部分,也是比较难理解和使用好的部分.下面对装饰器做一下简单整理 1. 前言 装饰器实际上是应用了设计模式里,装饰器模式的思想: 在不概念原有结构的情况下,添加新的功能 ...

  9. python装饰器-如何理解Python装饰器?

    我从以下几点,由浅入深详细讲解一下Python装饰器:什么事装饰器? 为什么用装饰器? 在哪里用装饰器? 然后以示例+讲解相结合的方式阐述,同时会讲解一些在很多教程和书籍中不会涉及到的内容. 什么是P ...

最新文章

  1. 只用一张训练图像进行图像的恢复
  2. IT兄弟连 JavaWeb教程 JSON和JSON字符串
  3. 结合typedef更为直观的应用函数指针
  4. 计算机科学中最重要的32个算法zz
  5. easy ui example
  6. k8s控制器模式介绍
  7. C++ ifstream 从文件中 字符串和数字混合输入
  8. 文献记录(part33)-Hierarchical deep neural network for mental stress state detection using IoT ...
  9. Python注释风格--Google风格
  10. [妙味DOM]第五课:事件深入应用
  11. 回调函数原理与Python实现
  12. 数据:以太坊2.0合约余额新增1.16万ETH
  13. Mysql Workbench中EER Diagram逆向生成表
  14. python通过解释器内置的open_Python 之 文件读写的学习
  15. java注释@para_@RequestParam注解的使用
  16. 微软收缩nano服务器容器图像,微软将推出全新服务器操作系统:Nano Server
  17. 17. 装箱、拆箱的最小化
  18. MATLAB与word的交互
  19. 服装进销存软件哪个好?十大优质服装进销存管理软件排名
  20. 计算机科技英语论文,计算机科技英语论文大纲模板 计算机科技英语论文提纲怎么写...

热门文章

  1. 程序如何在RAM ROM运行,内存分配与分区
  2. selenium豆瓣登陆
  3. java中的smm,java毕业设计_springboot框架的基于SMM框架的局域网文件共享及检索系统...
  4. 2023年中高级前端养成指南-需要关注和学习的13大类80余个前端技术栈与前端趋势-看这篇就够了系列
  5. Cardinality_estimate
  6. 台式机耳机或音响使用
  7. 创业项目-网赚项目 - 靠一份文档做到月入数万
  8. “刘知远实验室”的关系抽取实验复现
  9. 小觅相机录制rosbag数据集
  10. FreeNAS 0.72 安装 mldonkey 3.0.6