首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >@Environment vs @Environment

@Environment vs @Environment
EN

Stack Overflow用户
提问于 2019-09-23 19:54:42
回答 5查看 2.5K关注 0票数 7

在SwiftUI中,@Environment和@Environment对象有什么区别?

从我从文档中发现的信息来看,@Environment似乎是用于像ColorScheme这样的全局依赖项。但我找不到它们之间的任何精确区别。例如,它们可以互换使用吗?

EN

回答 5

Stack Overflow用户

发布于 2020-05-07 00:39:56

这是我为自己准备的笔记。可能很有用,

@EnvironmentObject

类似于@ObservedObject

  • The的模型应该确认符合ObservableObject协议的

  • 我们需要将这个模型中的属性标记为@Published来通知主动使用

  • 的视图的变化这个模型的对象应该是

  • 不需要默认值,因为它可以从环境中读取默认值。如果对象在环境中不可用,应用程序将crash.

  • Another主要区别是,假设我们有5个视图(V1…V5),如果我们想将一个对象直接从V1传递给V5,我们可以使用@EnvironmentObject而不是@ObservedObject。设置要在V1中传递的数据,并在V5(或需要的任何位置)中检索它。代码将非常简单,它将同时只包含一种类型的实例,完全基于视图( environment.

  • Its

  • )。如果父视图设置了环境对象,则它的所有子视图都可以使用它。如果另一个父视图设置了另一个env对象,它们的子视图可以让我们使用它。如果你在SceneDelegate的ContentView中设置了环境对象,它的所有子视图都可以使用它。

@Environment

  • 我们可以使用它来获取系统相关的值,如应用程序是在亮模式还是暗模式下运行、核心数据的托管对象上下文、大小类等...
  • 我们需要提供适当的键来访问它的值,因为它对多个键具有相同的数据类型。

谢谢!‍

票数 14
EN

Stack Overflow用户

发布于 2021-04-05 08:13:05

我想在别人的回答中添加一些东西。

@Environmentvalue类型,但@EnvironmentObject引用类型。

@EnvironmentObject.If中,您只能使用对象的单个实例。如果添加另一个对象实例,它将替换上一个实例。

但是,作为@Environment键值对,只需确保键不同即可。

您只需要使用@EnvironmentObject var object: Object让对象从环境中检索实例,并通过.environmentObject(Object())注入实例

另一方面,有许多预定义的@Environment系统管理的环境值。您也可以创建自定义的。需要符合EnvironmentKeystruct类型。

这里是一个示例

代码语言:javascript
复制
struct SunlightKey: EnvironmentKey {
    static var defaultValue: Double = 1.09
}

然后将其作为其扩展添加到EnvironmentValues中。

这里是一个基本的示例

代码语言:javascript
复制
extension EnvironmentValues {
    
    var sunlight: Double {
        get { self[SunlightKey.self] }
        set { self[SunlightKey.self] = newValue }
    }
    
}

然后,像这样使用它,视图文件中的@Environment(\.sunlight) var sunlight通过.environment(\.sunlight, 4.05)注入

希望,这很有帮助

票数 6
EN

Stack Overflow用户

发布于 2019-09-23 20:41:56

@Enviroment允许您访问属性的值,例如用户设置(例如,配色方案、布局方向等)或视图的属性,如EditMode或PresentationMode。@EnviromentObject由您定义,可用于所有视图,对它的更改会驱动您的视图更新。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58061910

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档