问题标签 [observableobject]
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 - 将解码的 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 中。
我很感激任何建议。
谢谢。
swiftui - 将 ObservedState 的已发布值分配给状态
我有一种状态叫做时间
和一个名为 timerWrapper 的 ObservedObject
可以从子视图更新时间,如果我使用它,我还希望能够使用 timerWrapper (theObservedObject) 更新它:
并这样做:
文本不更新。只有当我这样做时它才有效:
我知道那是因为当剩余秒数发布时,它会重新加载 UI。但我怎样才能解决这个问题?提醒我有 2 个可以更新时间的可能来源,这就是为什么我在视图构建器中创建文本时不直接使用观察对象的原因。
ios - SwiftUI Published 变量不会触发 UI 更新
我有一个带有导航视图列表的应用程序,当稍后在应用程序中添加新元素时,该列表不会更新。初始屏幕很好,无论我如何编写它们,此时都会触发所有内容,但除此之外,它保持不变。在某些时候,我将我的“init”方法作为 .onappear,动态元素不会进入,但是当我在应用程序中来回移动时,静态元素会被添加多次,这不再是我现在的代码。
这是我的内容视图的样子,我试图将导航视图部分移动到具有已发布 var 的类,以防万一它有帮助,从视觉上它可以改变任何东西,也可以提供帮助。
和 DiceViewList 类
我正在开发最新的 Xcode 11,以防万一
编辑:根据建议编辑代码,问题根本没有改变
和DiceViewList
班级
swift - 即使使用 objectWillChange,ObservableObject 文本也不会更新 - 多个类
我目前正在编写一个实用程序,作为其中的一部分,接收一个字符串(通过 WebSockets 和 Starscream 库),然后将字符串值显示在 SwiftUI 视图(名为 ReadingsView)中。
代码的结构如下 - 有两个类,管理 WebSocket 连接的 WSManager 类和具有 ObservableObject 属性的 GetReadings 类,它管理和存储读数。
当使用 WSManager 类中的 didReceive 方法接收到字符串时,它被 WSManager 类中的 decodeText 方法解码,然后调用 GetReadings 类中的 parseReceivedStrings 方法。
解析值时,我希望 ReadingsView 中的值会立即更新,因为我已将变量标记为 @Published,并使用 objectWillChange 属性手动推送更改。willSet 参数中的打印语句反映了新值,但文本不会更新。在 ReadingsView 代码中,我通过在按下刷新按钮时手动调用 parseReceivedString 方法来弥补这一点(这用作 WebSocket 协议的一部分来发送请求),但这会导致读数落后于它们的位置应该。理想情况下,我希望读数在用上一段中描述的方法解析后立即更新。
我想知道我是否使用了正确的声明,或者我尝试做的是否与使用多个类不兼容——这是我第一次使用 SwiftUI,所以我可能会遗漏一些细微差别。提前谢谢你的帮助。
编辑 - 添加代码
内容视图
ios - SwiftUI 视图在更改 @ObservedObject 时未更新
这是一个简单的基于 MVVM 的 TestView:
从视图模型内部更新模型时,视图不会更新。文本最终应该会产生一些介于 1 和 10 之间的随机数。请让我知道我哪里出错了。
ios - SwiftUI 中 MVVM 模式中多个切换的绑定变量数组
我有一个简单的用例,有一个动态数量的文本的 VStack,其中切换按钮来自一个数组。
出现以下问题:
- 在 MVVM 模式中,绑定变量可以放在模型类中还是应该放在视图模型中?
- 当切换状态发生变化时,如何将状态变化的消息从模型类发送到视图/场景?
- 如果在视图模型中为每个切换状态使用绑定变量数组,如何知道数组的哪个特定元素已更改?(见下面的代码片段)
请帮忙解答以上问题。
ios - 如何绑定模型中的计算属性和 SwiftUI 中视图的 @Binding 属性
我正在尝试制作一个关于 restful 的 API Tester 应用程序。我的模型存储了一些属性,方案协议如“http”,主机如“www.google.com”,路径如“/search”和查询参数如“?q=keyword”。和一个关于 URL 字符串的计算属性,它是从上面存储的属性中加入的。
到目前为止一切正常,但 List 中的文本字段不起作用。它可以从模型中读取更新,但不能将文本字段的更改写入模型,导致其他视图不更改同步。
有什么问题?也许我理解错了?有人帮帮我吗?</p>
ios - SwiftUI:具有计算属性的 ObservableObject
我有一个带有自定义月份选择器的简单视图。每次您单击 V 形左或右时,
在 DateView 我有两个私有变量:startDateOfMonth2: Date和endDateOfMonth2: Date。但它们仅在 DateView 中可用。
问题
如何使这两个变量在其他视图中可用?
我尝试将它们添加为 @Published 变量,但出现错误:
属性包装器不能应用于计算属性
我只发现了几个类似的问题,但我无法在我的代码中使用它们的答案。
swift - SwiftUI:ObservableObject 不适用于 fetchRequest init
我在DateView中有一个像这样声明的 ObservableObject :
我可以在其他视图中访问 startDateOfMonth 和 endDateOfMonth,如下所示:
但是当我尝试在我的TransactionsListView的 fetchRequest 初始化程序中使用 ObservableObject 中的这些变量时,我遇到了一个问题:
我收到一个错误:
在初始化之前使用的变量“self.fetchRequest”
我做错了什么?我试图在没有 self 的情况下在 init 中使用这些变量。同样的错误。它起作用的唯一方法是,如果这些 startDateOfMonth 和 endDateOfMonth 不在 ObservableObject 中,而是作为祖先视图中的一个变量,我通过 fetchRequest init 作为参数传递给我的视图。但是我很少有这样的视图,并且想使用 ObservableObject,而不是一直将相同的参数传递给子视图。
ios - 使用更新的@published 变量推送导航链接
我在工作表中更新了已发布的 var chats
。当工作表被解除(通过按钮按下)时,MessageView
导航到ChatView
. 我希望在 中使用更新chats
的ChatView
内容,但现在第一次推送时,chats
不会更新,直到您返回并再次推送视图。有办法绕过吗?
getAllChats 是带有 var 的 observableobjectchats
消息视图
聊天视图