SwiftUI - ObservableObject 创建多次

2024-03-29

我在视图中创建了一个 ObservableObject。

@ObservedObject var selectionModel = FilterSelectionModel()

我在里面放置了一个断点FilterSelectionModel's init函数并且被多次调用。因为这个视图是NavigationLink,据我所知,它是随后创建的,并随之创建了选择模型。当我导航到视图时,会再次创建选择模型。

在同一个视图中,我有一个“子视图”,我将选择模型作为EnvironmentObject所以子视图可以改变它。

AddFilterScreen().environmentObject(self.selectionModel)

当子视图被关闭时,selectionModel 将再次被创建,并且对其所做的更改将会消失。

有趣的注释: 在最顶层是NavigationView。如果我添加

.navigationViewStyle(StackNavigationViewStyle())

to this NavigationView,我的选择模型的更改消失了。但如果我do not添加navigationStyle,selectionModel 在子视图中所做的更改仍然保留! (但我不想要分割导航视图,我想要堆叠导航视图)

在这两种情况下 - 有或没有navigationStyle,selectionModel被创建多次。我无法理解这一切应该如何可靠地工作。


最新的 SwiftUI 更新为这个问题带来了解决方案。 (iOS 14 及以上)

@StateObject是我们应该使用的而不是@ObservedObject,但仅限于创建该对象的位置,而不是在我们传递同一对象的子视图中的所有位置。

For eg-

class User: ObservableObject {
    var name = "mohit"
}


struct ContentView: View {
  @StateObject var user = User()

  var body: some View {
    VStack {
      Text("name: \(user.name)")
      NameCount(user: self.user)
   }
  }
}


struct NameCount: View {
  @ObservedObject var user

  var body: some View {
    Text("count: \(user.name.count)")
  }
}

在上面的例子中,只有视图负责(内容视图)用于创建该对象正在注释User对象与@StateObject和所有其他视图(姓名计数)共享正在使用的对象@ObservedObject.

通过这种方法,每当您的父母查看(内容视图) 被重新创建,则User对象不会被重新创建,并且它将保留其@State,而您的孩子只看到observing到相同的User对象不必关心它的重新创建。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SwiftUI - ObservableObject 创建多次 的相关文章

  • 为什么这个 SwiftUI Picker 代码不起作用?

    Xcode 11 2 1 下面的代码是一个包含两个组件的简单表单 选择器 选择字母 和文本 显示所选字母 代码编译并运行 但是当选择一个字母时 它不会出现在 选定 文本中 此外 第一次 仅 选择一个字母时 Xcode 会显示一个 虚假的 运
  • 如何设置visionOS中WindowGroup的大小?

    我想设置 a 的尺寸WindowGroup在visionOS上运行时为特定大小 在 iOS 和 maOS 上我们有 defaultSize对此的修饰符 当为visionOS构建时 Xcode提供了一个稍微不同的修饰符 带有一个称为深度的附加
  • 删除视图中的绑定对象时出现“致命错误:索引超出范围”

    在修改子视图依赖于绑定对象的数组时 我在避免索引超出范围错误时遇到了一些麻烦 我有一个名为 WorkoutList 的父视图 WorkoutList 有一个 ActiveWorkoutStore 的 EnvironmentObject Ac
  • 在 Xcode11 Beta 4 中将 String(format: , args) 与 SwiftUI 一起使用时出错

    升级到 Xcode 11 Beta 4 后 我在使用时开始看到错误String format args with State财产 请参阅下面的代码 第二Text行抛出错误 表达式类型 String 在没有更多上下文的情况下不明确 while
  • 绑定到枚举的关联值

    是否有一个标准的方法来绑定 比如说 TextField到枚举的关联值 所以 鉴于此 enum Choice case one String case two String 我可以以某种方式将它用作视图中的绑定吗 State var choi
  • SwiftUI 是否可以调用该函数并从其他页面更改视图?

    这是我的代码 struct FirstPage View var body some View VStack NavigationView VStack Text First Page bold NavigationLink destina
  • 具有多个编辑按钮的 SwiftUI 表单

    试图有一个Form有多个部分 每个部分Section与它自己的EditButton 如何触发Section进入 编辑模式 而不触发中的所有部分Form 如所附 gif 所示 如何追踪EditButton在一定的Section被触发 以便Bu
  • 使用 SwiftUI 同时放大手势和拖动手势

    Apple 地图应用程序允许同时用两根手指拖动和放大 我尝试使用 SwiftUI 实现此功能gestures https developer apple com documentation swiftui gestures 同时旋转和放大可
  • SwiftUI:如何在没有 AppDelegate 的情况下强制横向

    我正在制作带有视频播放器的应用程序 除了这个视频播放器之外 我的整个结构仅用于纵向视图 我想仅为该视图启用横向旋转 但我查过很多论坛 每个答案都是向 App Delegate 添加一些代码 但我没有 那我能做什么呢 这是给您的演示 您可以通
  • 如何在 SwiftUI 中对 Imagepicker 进行两次单独的调用?

    我希望用户能够将两个单独的图像上传到同一视图的两个不同部分 我能够让第一张图像在顶部正确显示 但每当用户添加第二个图像时 顶部的图像会再次更新 而不是底部的图像 截屏 https i stack imgur com IOi90 png 下面
  • 在完全自动反转重复周期之间延迟 SwiftUI 中的重复动画

    我正在 SwiftUI 中构建一个 Apple Watch 应用 它可以读取用户的心率并将其显示在心形符号旁边 我有一个动画可以让心形符号反复跳动 由于我知道实际用户的心率 因此我希望使其以与用户心率相同的速率跳动 并在每次速率变化时更新动
  • SwiftUI 列表未使用 ForEach 正确更新

    我正在尝试使用带有两个 ForEach 循环的列表创建收藏夹功能 当我单击按钮时 该项目会移动到正确的部分 但按钮图像和功能不会更新 我是否遗漏或做错了什么 如果我导航到另一个视图并返回 列表最初会正确呈现 但如果我单击按钮 仍然会表现出相
  • SwiftUI 双向绑定到枚举案例中 ObservableObject 内的值

    我正在尝试观察 a 的变化bool包含在一个值ObservableObject这是一个值enum案件 这是我想要实现的目标的示例 但使用当前的方法我收到错误Use of unresolved identifier type1Value im
  • 如何按日期正确对从 CoreData 获取的列表进行分组?

    为了简单起见 假设我想创建一个简单的待办事项应用程序 我的 xcdatamodeld 中有一个实体 Todo 其属性id title and date 以及以下 swiftui 视图 如图所示的示例 import SwiftUI struc
  • 如何在 SwiftUI 中管理 AVPlayer 状态

    我有 SwiftUI 中的 URL 列表 当我点击某个项目时 我会呈现一个全屏视频播放器 我有一个 EnvironmentObject它处理一些查看器选项 例如 是否显示时间码 我还有一个显示和隐藏时间码的切换开关 我只在本例中包含了该切换
  • 返回列表 (SwiftUI) 后,选定的列表行背景保持灰色(选定)。 iOS 14 + Xcode 12

    从详细信息视图返回后 所选行保持灰色 在模拟器和真实设备上都会发生 仅在 iOS 14 上 有谁知道如何删除它 使其行为与 iOS 13 上相同 不保持选中状态 这是项目中唯一的代码 没有其他导航或任何东西 let items item1
  • 保存 ScrollViews 位置并稍后滚动回该位置(偏移位置)

    我找到了保存 ScrollViews 的方法offset with a GeometryReader and a PreferenceKey SwiftUI 从 ScrollView 获取当前滚动位置 https stackoverflow
  • SwiftUI 转义闭包捕获变异的“self”参数

    我有一个可以通过两种方式打开的视图 一个包含提供给它的数据 另一个包含对 Firestore 文档的文档引用 我创建了两个构造函数 在第一个构造函数中我提供数据 在另一个构造函数中我提供文档参考 然后我使用此引用进行网络调用 但出现错误 E
  • 自定义“可搜索”搜索字段 SwiftUI iOS 15

    When using the new searchable modifier in SwiftUI on iOS 15 I have no way to customize the Search Bar appearance Specifi
  • 理解 UIViewRepresentable

    斯威夫特 5 0 iOS 13 尝试了解 UIViewRepresentable 的工作原理 并将这个简单的示例放在一起 几乎就这样了 但也许完全是无稽之谈 是的 我知道 SwiftUI 中已经有一个 tapGesture 这只是一个测试

随机推荐

  • 苹果推送通知,定期发出蜂鸣声

    我对 iOS 上的苹果推送通知负载有一个小但棘手的问题 据我所知 推送通知有效负载可以有声音 长度 可行吗 如何 PS 它是一个企业应用程序 不会部署在App Store上 提前致谢 是的 您可以这样实现 注册设备以发送推送通知 每 30
  • 如何将 Python/Pandas 数据插入规范化数据库

    假设我有一个 Pandas 数据框 其中包含以下记录 Time Action User Company User2 00 02 buy share msmith ACME tjones 00 03 sell share tjones Alp
  • 调用网络服务。需要缺失的链接

    有人可以填写下面代码中缺少的链接吗 第一种方式 Web服务接口文件是HappyService xml JaxWSProxyFactoryBean factory new JaxWsProxyFactoryBean factory getIn
  • 如何自动检测代理?

    对于我的一个项目 我制作了一个 QWebView 一切工作正常 但是当我在学校使用它时 我收到错误 因为代理未定义 我怎样才能像在 Firefox 和 IE 中那样自动检测代理 我在中找到了这个QNetworkProxyFactory ht
  • 更改标签栏项目图像和文本颜色 iOS

    这是我的标签栏 下图显示了正在运行的程序和选定的 新闻 项 很明显 条形色调的颜色工作得很好 正如我想要的 但tintColor只影响图像而不影响文本 另外 当选择一个项目时 如上所示 新闻 项目颜色变为蓝色 我该如何防止这种情况发生 我希
  • 不支持的操作:在 Web 上使用 dart io 时的_Namespace

    I am trying to use dart io to read and write file I am getting below exception Uncaught Error Unsupported operation Name
  • 在 PHP 中仅缓存页面的一部分

    是否可以只缓存 PHP 页面的特定部分 或者 PHP 脚本中特定代码段的输出 似乎当我尝试缓存特定页面时 它缓存了我不想要的整个页面 页面中的某些内容应该随着每次页面加载而更新 而其他内容 例如包含来自数据库的数据的下拉列表 只需要每小时左
  • Spring bean别名使用

    我知道bean别名在spring中意味着什么 但我想知道使用别名的用例 为什么有人想要使用别名而不是名称来引用 bean 提前致谢 我见过的用法如下 您有给定接口的两个实例 SomeBean 一个用于环境 A 一个用于环境 B 因此 您定义
  • 悬停时的黑白 CSS 背景

    我有一个 CSS 精灵 如下所示 HTML a href http www domain com estate a CSS estates background position 200px 0px width 96px height 90
  • 尝试使用地址栏或刷新页面访问时,Azure Web应用程序返回404

    我需要一些有关我的天蓝色应用程序的帮助 我有一个website使用 Azure 上托管的 ReactJS 但发生了一些奇怪的事情 我可以使用地址栏访问的唯一页面是 mydomain com 或 www mydomain com 如果我尝试访
  • 使段落文本换行到 div 内

    我读了这篇文章here https stackoverflow com questions 1587964 wrap text inside fixed div with css or javascript 我有一个简单的目标 我只想让我的
  • 从 C++ 中的数字输入动态创建矩阵

    我有一个控制台应用程序 我试图从数字输入创建一个二进制矩阵 如果想要创建一个 2x4 矩阵 我必须做两个输入 每一行一个 输入 控制台 将如下所示 第一个输入 1101 第二个输入 0111 然后我想创建一个如下所示的矩阵 1 1 0 1
  • 有哪些方法可以在数据库中存储有关匿名/来宾用户的信息?

    我们的应用程序具有在线商店等功能 通常会要求用户在完成销售之前注册 从而创建一个独特的customer ID正在进行中 当他们返回时 他们可以登录并从数据库中检索他们的联系方式和交易历史记录 我们现在正在探索在 匿名 或 访客 客户的情况下
  • C# 闭包堆分配发生在方法开始时

    我似乎遇到了 C 编译器的一些奇怪行为 考虑以下代码示例 static void Main string args Foo false 8 public static void Foo bool execute int x if execu
  • laravel 5.3 当页数 = 1 时的分页

    我有城市表 它有 7 个城市 我有一个视图页面来显示这些城市 每页 10 个城市 控制器 cities City orderBy id desc gt paginate 10 return view cities home compact
  • 在浏览器控制台中使用 Angularjs $http

    我在开发过程中在浏览器控制台中测试了 AngularJS 服务 以进行快速验证 我将服务注入控制台的方式如下所述这个问题 https stackoverflow com a 15529185 605840 or var inj angula
  • 使用字典中的特定键构建列表(python)?

    我正在用 Python 实现 Dijkstra 搜索算法 在搜索结束时 我使用前驱图重建最短路径 从目标节点的前驱开始 例如 path path append destination previous predecessor map des
  • 如何在 Selenium 中的 HTML5 Canvas 上执行鼠标滚轮滚动?

    我正在开发 GWT 应用程序 类似于 Paint 在此 我有一个 HTML5 Canvas 其中有一个功能 向上和向下滚动鼠标滚轮将放大和缩小画布 我进行了很多搜索 但没有找到解决此问题的解决方法 这是所做的 int PosX 0 int
  • 系统('php -l')的替代品?

    在我目前正在从事的一个项目中 我们正在考虑放置system http php net system进入 php ini 的disable functions http php net disable functions宣言 现在 我们的一个
  • SwiftUI - ObservableObject 创建多次

    我在视图中创建了一个 ObservableObject ObservedObject var selectionModel FilterSelectionModel 我在里面放置了一个断点FilterSelectionModel s ini