问题标签 [observedobject]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
489 浏览

swift - SwiftUI ObservedObject 导致不需要的可见视图更新

我正在开发一个将过滤器应用于图像的应用程序。过滤器有许多用户可以修改的参数。我创建了一个包含所述参数的 ObservableObject。每当其中一个参数发生变化时,视图都会有可见的更新,即使视图显示的值与以前相同。当我将参数建模为单独的 @State 变量时,不会发生这种情况。

如果这是意料之中的(毕竟观察到的对象确实发生了变化,因此依赖于它的每个视图都会更新),那么 ObservedObject 是否适合这项工作?另一方面,将参数建模为单独的@State/@Binding 变量似乎非常不方便,特别是如果需要将大量参数(例如10+)传递给多个子视图!

因此我的问题是:

我在这里正确使用 ObservedObject 吗?可见更新是无意的,但可以接受,还是在 swiftUI 中有更好的解决方案来处理这个问题?

使用@ObservedObject 的示例:

使用@State 变量的示例:

0 投票
0 回答
226 浏览

swiftui - SwiftUI 是否可以使用 Toggle 来更新 ObservableObject 的值

我在视图中有一个日期选择器,一旦用户输入日期并保存,我就会显示一个带有切换的新视图。理想情况下,一旦用户翻转切换,我希望能够使用已输入的日期字段设置提醒。我创建了一个 ObservableObject

我在视图中声明为:

我收到一个错误“类型‘()’不能符合‘视图’;只有结构/枚举/类类型可以符合协议”

这在按钮按下的操作区域中工作正常,但我看不出是否可以对切换翻转做出反应 - 切换是否只是为了反映 UI 更改而设计的,我应该实现一个按钮吗?肯定很难适应 SwiftUI 范式,即使它总体上是有意义的

谢谢 !

根据请求 - 这是我希望它可以工作的地方(通过按钮)

0 投票
1 回答
592 浏览

xcode - SwiftUI 将数组的元素作为绑定传递给子视图

我尝试制作我的第一个 iOS 应用程序,但遇到以下问题,我无法理解如何解决它。我有一个选项卡式 MainPageView,我在其中加载所有数据,然后通过不同的视图传递它。当我在任务视图中添加新项目时,新项目出现在列表中,但是当发生使用上下文菜单将任务标记为已完成之类的事情时,我还想更新任务视图

任务结构:

MainPageView - 这里的任务在 Firebase 观察下,因此在数据库中完成更改时它应该自动更新

任务页面视图

和任务视图

}

我想要实现的是当用户单击上下文菜单中的标记为完成按钮以强制更改 TaskPageView 列表中 TaskView 中的文本时。我尝试创建另一个类,例如 Tasks,它是 ObservableObject,其中任务列表是 @Published,在 MainPageView 中将任务列表设为 @ObservedObject 并在 ForEach .indices 中使用,并将任务作为 tasklist[idx] 传递,但仍然没有成功。

谢谢你的时间!

0 投票
1 回答
430 浏览

swiftui - 将解码的 JSON 数据传递给 SwiftUI ContentView

API 调用和 JSON 解码工作正常,因为我可以毫无问题地打印以控制 JSON 数据集中的任何项目。

这是 API 调用和测试打印:

这是用于解码和数据对象结构的“摘要”数据模型的结构:

如图所示,API 调用和 JSON 解码的结果根据需要使用 ObserveableObject 和 @Published 发布。

在 ContentView 中,我遵循 ObservedObject 规则,只想在 UI 上显示来自 JSON 数据的数据点以确认它正在工作:

但是...我在文本显示行 1)Initializer 'init(_:)' requires that 'Binding<Subject>' conform to 'StringProtocol'和 2)处收到这 2 个错误Value of type 'ObservedObject<APICall>.Wrapper' has no dynamic member 'date' using the key path from root type 'APICall'

我猜第二个错误是问题的根本原因,表明数据没有正确传递到 ContentView 中。

我很感激任何建议。

谢谢。

0 投票
1 回答
110 浏览

swiftui - 将 ObservedState 的已发布值分配给状态

我有一种状态叫做时间

和一个名为 timerWrapper 的 ObservedObject

可以从子视图更新时间,如果我使用它,我还希望能够使用 timerWrapper (theObservedObject) 更新它:

并这样做:

文本不更新。只有当我这样做时它才有效:

我知道那是因为当剩余秒数发布时,它会重新加载 UI。但我怎样才能解决这个问题?提醒我有 2 个可以更新时间的可能来源,这就是为什么我在视图构建器中创建文本时不直接使用观察对象的原因。

0 投票
1 回答
120 浏览

swift - 在 Swift 中使用 @observable,我想使用计时器定期刷新 ObservedObject。我该怎么做呢?

我正在编写一个从网站中提取数据并使用 SwiftUI 显示它的应用程序。

我的主视图有一个@ObservedObject类型DataStore(),它在视图中使用:

数据模型定义为:

我想getZones()每 30 秒打一次电话。我该怎么做呢?

我猜我在某处使用了这样的代码,但我不知道把它放在哪里,或者如何在闭包中调用函数:

0 投票
1 回答
525 浏览

ios - @ObservedObject 更改后 SwiftUI 视图未更新

预期功能:

  1. 点按即可添加圈子
  2. 按“下一步”创建新的“框架”
  3. 将圆圈拖到新位置
  4. 按“返回”将圆圈恢复到之前的位置

问题: 如上图,在最后部分,当我点击“返回”时,圆圈停留在拖动位置,而不是按预期还原。

例如,当我向 (0,0) 添加一个圆圈时,创建一个新框架,将圆圈拖动到新位置 (10, 10) 并点击“返回”,控制台打印“框架:0,位置 (0,0) ”。当我点击下一步时,它会打印“ Frame: 1, position (10,10) ”。并再次点击“返回”打印 (0,0)。但 Circle 位置不会更新。

我已经尝试为结构使用一个类,DraggableCircleModel并在其位置上使用了@Published,但这似乎并不奏效。

我在下面提供了我的课程以提供更多背景信息。这也是我第二次在这里发布问题,所以任何改进我的问题的建议都将不胜感激。非常感谢!

返回和下一步按钮

用于呈现圆圈的视图:

}

DraggableCircle 视图的相关部分

0 投票
2 回答
964 浏览

class - SwiftUI @Published 和 @ObservedObject 不会去 NavigationLink 目的地

对不起,我努力总结的标题和长度

我有一类@ObserableObject @Published 数据,我想更改并使用通过 NavigationLink 访问的第二页上的新数据

然后我有一个选择器来选择/更改号码

当我让文本在主屏幕上显示更正的数字并在选择器更改时更改/更新时,这将按预期工作

然后我使用 NavigationLink 移动到第二个屏幕

在第二个屏幕上,我设置了@ObservedObject 并再次显示文本。

按开始时,它只显示数字 5 + 1,而不是使用选择器更改为的数字。

我努力了;

  • 不使用自我。但没有明显的区别
  • 切换到绑定 $ 并遇到以下问题;无法分配给属性:“correctNumber”是一个仅获取属性,实例方法“appendInterpolation”要求“Binding”符合“_FormatSpecifiable”
  • 将 @Published 添加到 correctNumber 但我无法将其添加到计算状态

现在我没有想法了,任何人都可以帮助一个菜鸟,拜托

PS如果术语有误,请见谅,请随时纠正我,以便我下次学习

0 投票
1 回答
587 浏览

binding - 如何使用 SwiftUI 在 CoreData 中对一对多关系进行 ForEach?

我目前正在使用 CoreData 开发 SwiftUI 应用程序。我目前确实在 CoreData 中定义了 2 个实体。

配方实体

带代码:

RecipeStep 实体

带代码:

我已经可以使用 ForEach 毫无问题地绕过父项。为此,我使用@ObservedObject。保持 SwiftUI 方式的绑定。

我这样做:

在 BreadListItem 内部,我使用了 @ObservedObject,它的作用就像一个魅力。

我现在想做的,是按照我的食谱步骤做同样的事情。我的假设是我可以对 NSOrderedSet 中的元素使用相同的 ForEach 来执行此操作,如下所示:

问题在于我不能遍历这些元素,因为 NSOrderedSet 不符合 RandomAccessCollection。当然,我可以将 NSOrderedSet 强制转换为数组,但这会破坏与对象的绑定,不是吗?我只是没有看到如何在保持 CoreData 完整的同时使用 @ObservedObject 实现与集合的绑定。

有人可以在这里帮助我吗?

0 投票
1 回答
69 浏览

swift - 这个 SwiftUI 对象是按值传递还是按引用传递?

考虑一个简单的 SwiftUI 类来实现倒数计时器:

我在一个带有“开始”按钮的简单视图中创建了这个秒表的一个实例。在这个视图中,还有一个按钮(导航链接)可以移动到第二个屏幕。我将秒表类的实例传递到第二个屏幕。

这是第二个屏幕:

这一切都很好。在第一个屏幕上启动秒表后,如果我移至第二个屏幕,秒表将继续更新第二个屏幕中的文本视图。

新手问题:当“ContentView”中的“秒表”变量通过 NavigationLink 视图传递给“Screen2”时,该变量是通过值传递还是通过引用传递?