问题标签 [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.
swiftui - SwiftUI 视图未在对已观察对象的已发布属性的异步更改时更新
我有以下 SwiftUI 视图:
观察 ProductViewModel
Product 是一个包含多个字符串属性的 Swift 结构体:
它是从远程 API 获取的。执行获取的服务返回一个组合未来并将其传递给视图模型,如下所示:
为简洁起见,我排除了网络和错误处理逻辑,因为它与手头的案例无关。为了尽快重现这一点,只需使用一些虚拟值初始化一个模拟产品,并将其传递给成功回调,延迟如下:
一旦产品通过网络到达,它就会被分配给已发布的产品属性。提取工作并将正确的值分配给已发布的属性。显然,这发生在创建视图之后,因为网络调用需要一些时间。但是,即使发布的对象已更改,视图也不会更新。
当我直接通过视图模型初始化程序而不是未来传递产品时,它按预期工作并且视图显示正确的产品。
关于为什么视图在通过组合未来异步更新时视图模型状态的变化没有反应的任何建议?
编辑:当我问这个问题时,我将 ProductViewModel + ProductView 嵌套在另一个视图中。所以基本上productview只是一个更大的CategoryView的一部分。CategoryViewmodel 以专用方法初始化 ProductViewModel 和 ProductView:
然后在每次更新时由 CategoryView 调用。我猜这让嵌套 ProductViewModel 中的 Published 变量无法正确更新,因为从 CategoryView 向下的视图层次结构在每次更新时都会重建。因此,每次更新都会调用 createProductView 方法,从而对 ProductView + ProductViewModel 进行全新的初始化。
也许对 SwiftUI 有更多经验的人可以对此发表评论。
在嵌套视图中嵌套可观察对象通常是一个坏主意,还是有办法使这项工作不是反模式?
如果没有,当你有嵌套视图并且每个视图都有自己的状态时,你通常如何解决这个问题?
swiftui - SwiftUI 在observedObject 更改时没有更新视图
我正在做一个登录和显示数据应用程序。当用户登录时,数据将正确显示。当我注销并登录另一个帐户时,数据应该由 observedObject 更新,它调用函数来重新加载数据。但是当我登录应用程序时,主页视图仍然显示以前帐户的旧数据。我不知道什么问题。我尝试了很多方法来解决,即使我在注销时清除了课堂上的数据,但是视图仍然没有更新。寻求帮助,tq。
注销按钮
ios - SwiftUI 选择器中选定选项的值不会更新视图
我在 SwiftUI 应用程序中有以下内容。基本上我有一些我想在整个应用程序中使用的设置(设置类)。我有一个设置视图,它显示一个选择器来选择其中一个设置的值。应用程序的其他视图将仅使用设置的当前设置值。以下设置在 ContentView 中我看到了正确的firstLevel
设置值的意义上起作用。但问题是,在 SettingsView 中,我认为因为selectedFirstLevel
不是@State,所以它的正确值不会显示在我导航以选择even
或者odd
(奇怪的是,第一次是正确的)的选择器上。此选择正确地传送到 ContentView,但未在 SettingsView 上正确显示。我该如何解决这个问题?
设置.swift
内容视图.swift
SettingsView.swift
swiftui - SwiftUI - 如何基于@ObservedObject 为每个列表视图项创建编辑视图
我创建了一个我面临的问题的简单示例。我有两个视图,ListView 和 EditView。ListView 正在观察包含用户名列表的 UsersViewModel(复数)。
使用 NavigationLink 我想展示一个可以编辑用户名的表单,这就是我感到困惑的地方。我创建了一个 UserViewModel(单数),我有 EditView 观察,但是当我尝试调用 EditView 从 ForEach 循环传递值时,我收到一个类型不匹配错误,因为我没有传递 UserViewModel。
也许我误解了可观察的对象。我想我可以更改编辑表单上的用户名,导航回列表视图,然后我会在列表中看到更改。
编辑视图
data-binding - 无法从另一个视图 SwiftUI 访问数组元素
我有一个 creditCard 模型和 CreditCards 类,它具有附加 creditCard 的功能。
当通过一个按钮满足所有条件时,我正在附加一张新的信用卡。
当我尝试在我的 PaymentMethodView 中显示如下文本时,我在 PaymentMethodView 上看不到任何文本。
}
现在我需要在 PaymentMethodView 中显示这些信用卡
swift - 使用 ObservableObject 关键字传递数据
如何使用 ObservableObject 关键字将数据移动到其他屏幕?我将第一页上的数据保存到我使用关键字 Published 创建的变量中,但我无法在第二页上访问这些数据。
用户模型
用户数据存储
内容视图
我使用 contentView 屏幕上的 TextField 对象从用户那里获取信息。按下按钮后,我将其添加到 UserDataStore 中的数组中。我重定向到详细信息页面。
详细视图
在详细页面,我尝试查看记录的信息,但我不能。
swift - SwiftUI @ObservedObect 视图模型索引超出范围
在 Swift 中,我有一个连接到 FireStore 的 viewModel,当我调用它的函数 fetchData 时,它成功返回了许多文档。但是,当我尝试使用索引引用文档时,会出现超出范围的错误。
在此示例中,文档数返回为 1,因此我看不出为什么下一个 Text 语句不起作用。会不会是时间问题?意思是,文件在那个时候实际上是可用的。
swiftui - @ObservedObject 更改时文本框的 SwiftUI 高度动画
当 NetStatus 发生变化时,我尝试制作流畅的动画,但它并没有像我想要的那样工作。
我想获得与按下带有切换动画的按钮时相同的效果。注释按钮动画效果很好,我尝试通过缩放文本框架的高度来复制它。
注释按钮代码仅用于我想要的动画效果的工作示例(优雅地展开和关闭),我不需要此代码。
我怎样才能做到这一点?
swiftui - IOS 14 将 ObservedObject 添加到 var 导致视图不会出现在 iPhone 上
我正在研究斯坦福在线 CS139p 中的示例。记忆游戏的卡片被绘制出来。我将 viewModel 设为 ObservableObject,发布代表记忆游戏的 var,然后运行应用程序。一切都按我的预期发生。然后,我将 @ObservedObject 属性处理器添加到 View Controller 中的 viewModel var。当我运行应用程序时,我不再看到卡片被抽出。
问题1:发生了什么?
问题2:我将如何调试这个?我尝试设置断点并遍历,但我无法确定出了什么问题。我用谷歌搜索并找到了一些可以尝试的东西,但最终无法让它发挥作用。一年前,当我第一次尝试时,这个例子对我有用。
MemorizeApp.swift
EmojiMemoryGameView.swift
EmojiMemoryGame.swift
记忆游戏.swift
swiftui - 如何从我的 ObservableObject 类调用我的 View 结构中的方法
我将 @ObservedObject PropertyWrapper 用于我的 Picker 选择,并且我想在选择更改时在我的 View 结构中调用一个方法。我怎样才能做到这一点?
可观察对象代码:
查看代码:
我怎么做?谢谢!