IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> SwiftUI @State、@ObservedObject 和 @EnvironmentObject 之间有什么区别? -> 正文阅读

[移动开发]SwiftUI @State、@ObservedObject 和 @EnvironmentObject 之间有什么区别?

@State属于单个视图的简单属性。它们通常应该被标记private

@State对于属于特定视图并且永远不会在该视图之外使用,因此将这些属性标记为私有非常重要,以重新强化这种状态是专门设计为永远不会逃避其视图的想法。

为什么用@ObservedObject

对于更复杂的属性——当你想要使用一个可能有多个属性和方法的自定义类型,或者可能在多个视图之间共享时——你会经常使用它@ObservedObject

这与@State现在我们使用外部引用类型而不是像字符串或整数这样的简单本地属性非常相似。你仍然说你的视图依赖于会改变的数据,除了现在是你自己负责管理的数据——你需要创建一个类的实例,创建它自己的属性,等等。

无论您使用什么类型,@ObservedObject都应该符合ObservableObject协议。当您向可观察对象添加属性时,您可以决定对每个属性的更改是否应该强制正在观察您的对象的视图刷新。您通常会这样做,但这不是必需的。

观察对象有多种方法可以通知视图重要数据已更改,但最简单的方法是使用@Published属性包装器。如果您需要更多控制,您还可以使用来自组合框架的自定义发布者,但实际上这种情况非常少见。如果可观察对象碰巧有多个视图使用其数据,则任一选项都会自动通知所有视图。

警告:当您使用自定义发布者来宣布您的对象已更改时,这必须发生在主线程上。

为什么用@StateObject

介于@State@ObservedObject之间的某个地方@StateObject。这是 的一个特殊版本@ObservedObject,它的工作方式几乎完全相同:您必须遵守ObservableObject协议,您可以使用@Published将属性标记为导致更改通知,并且当对象更改时,任何观看 an 的视图@StateObject都将刷新其主体。

@StateObject和之间有一个重要区别@ObservedObject,即所有权——哪个视图创建了对象,哪个视图只是在观察它。

规则是这样的:无论哪个视图首先创建您的对象,都必须使用@StateObject,告诉 SwiftUI 它是数据的所有者,并负责保持数据的存活。所有其他视图必须使用@ObservedObject, 来告诉 SwiftUI 他们想要观察对象的变化,但不直接拥有它。

为什么用@EnvironmentObject?

解了如何@State为一个类型声明简单属性以在视图更改时自动刷新视图,以及如何@ObservedObject为外部类型声明一个在视图更改时可能会或可能不会导致刷新视图的属性。这两个都必须由您的视图设置,但@ObservedObject可能与其他视图共享。

还有另一种类型的属性包装器可供使用,即@EnvironmentObject.?这是一个通过应用程序本身提供给视图的值——它是每个视图都可以读取的共享数据。因此,如果您的应用程序有一些所有视图都需要读取的重要模型数据,您可以将它从一个视图传递到另一个视图,或者将它放入每个视图都可以即时访问它的环境中。

@EnvironmentObject当您需要在应用程序中传递大量数据时,可以将其视为一种巨大的便利。因为所有视图都指向同一个模型,所以如果一个视图更改了模型,所有视图都会立即更新——不存在让您的应用程序的不同部分不同步的风险。

转载:https://www.hackingwithswift.com/quick-start/swiftui/whats-the-difference-between-observedobject-state-and-environmentobject

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-10-17 12:46:08  更:2022-10-17 12:46:52 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/19 21:52:20-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码