问题标签 [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.
swift - 如何在 SwiftUI 中使用 UserDefaults 从 DatePicker 中保存/检索?
我正在尝试使用 DatePicker 选择一天中的特定时间,然后在选择该时间后,将时间保存为 ObservedObject 并使用 SwiftUI 将其保存到我的 UserDefaults 中。下面我的代码的问题是,虽然数据在时间的初始设置后被保存,但如果时间改变,该更新不会像我期望的那样显示在我的 DatePicker 对象中。任何人都可以帮助看看我在这里的代码做错了什么:
用户数据.swift
AlarmSettingsView.swift
validation - SwiftUI:它如何刷新视图以及为什么 @Published ObservableObject 属性随机工作
在我看来,SwiftUI 的工作方式越来越令人困惑。乍一看,它接缝快速且易于掌握。但是,如果您添加越来越多的视图,那么看起来很简单的事情就会开始表现得很奇怪,并且需要很多时间来解决。
我有Input
验证字段。这是自定义输入,我可以在很多地方重复使用。但是在不同的屏幕上,这可能会完全不同并且完全不可靠。
用表格查看
LabeledInput - 具有验证支持的可重用自定义输入视图
下面是我在 ObservableObject 即 LoginViewModel 中存储模型(输入值和验证)的方式。
当我根据视图父视图(屏幕)创建 ViewModel(在 LoginView 属性中或注入到 LoginView 构造函数)的方式使用此代码时,它嵌入的工作方式可能完全不同,可能会导致数小时的调试和意外行为。
- 有时似乎有 1 个 ViewModel 实例有时似乎每次 View 刷新都会创建此实例
- 有时 LabeledInput 正文令人耳目一新,并且标签的验证着色工作正常。其他时候它似乎根本没有刷新,也没有任何反应
- 有时刷新如此频繁键盘立即隐藏
- 其他时候根本没有验证
- 退出字段后或将手机横向旋转为纵向时,其他时间输入丢失
- 如果有一些事件导致父视图刷新,它可能会导致输入丢失数据和验证。
- 有时它会经常刷新,有时它根本不会刷新。
我尝试添加 .id(UUID) 、自定义 .id(refreshId) 或其他 Equatable 协议实现,但它不能按预期工作,因为它是可重用的自定义输入,验证可在多个屏幕上的多个表单之间重用。
这是简单的验证结构
而这里 FieldValidator ObservableObject
规则只是
更新
完整的 UIKitTextField 示例
这是示例 EmailRule 实现
swiftui - SwiftUI - 在加载视图后更新属性时,不会为 ObservableObject 属性更改调用 onReceive
我有一个视图,它在滚动视图中显示从 API 加载的几张照片。我想推迟获取图像,直到显示视图。我的观点,简化看起来像这样:
我的视图模型如下所示:
如果我在init
视图模型的方法中获取数据,则在设置onReceive
@PublishedimageUrls
属性时会调用视图上的块。但是,当我fetch
从init
方法中删除并从视图中调用时,使用:
即使数据已更新,也不会调用for onReceive
。viewModel.objectWillChange
我不知道为什么会这样,并且非常感谢这里的任何帮助。
ios - SwiftUI - 更改 @Published 结构时是否可以触发 didSet?
我刚刚更新到 XCode 11.4,我的一些代码已经停止工作。我@Published
在一个ObservableObject
. 以前,当我更新结构上的属性时,该didSet
方法会在发布的属性上触发,但现在情况不再如此。这种行为是否有可能在 Swift 的最新更新中被设计改变了?
这是一个简单的例子:
该属性会更新,但didSet
不会触发。
是否可以获取结构的嵌套属性来触发didSet
发布者的方法?
swift - 有没有办法在 Swift Combine 中多次调用 assign()?
我想用处理新发布的值时收到的值更新一些变量。例如,给定:
我还想将 XPublisher 和 YPublisher 的新值分配给变量(分别为 PublishedX 和 PublishedY)。
有没有办法设置这两个变量然后继续处理事件?
swift - 运算符函数'>'要求'UserRating'符合'BinaryInteger' - SwiftUI ObservableObject
首先 - 这些是我使用 ObservableObjects 的第一步,也许它只是一个小错误......
我尝试创建一个带有星星的评分栏(使用 paul hudson 教程),但有一个变量将用于 2 个以上的视图,所以我需要一个 ObservableObject。
Rating 在 Rating.swift 中创建,将在 FeedbackView.swift 中调用,FeedbackView.swift 将由 EKLComplete.swift 中的 TabBar 调用。
我用@Binding var 尝试了“Paul Hudson Way”,但我的代码与 Pauls 教程中的不同。我的观点都希望有变量,这是正确的 - 因为绑定。据我了解,@Binding 允许我与 2 个视图共享变量,在我的情况下,我的 EKLComplete 视图也想知道该值,所以它必须是一个 ObservableObject,对吧?
创建类后:
并在 3 个视图中使用以下代码实例化变量
这是我的代码,它会引发错误。
我收到以下错误消息:
运算符函数“>”要求“UserRating”符合“BinaryInteger”
这不起作用... 1. 说我的评级是 Int 2. 在我的班级中初始化评级
谢谢你的帮助!
swiftui - 如何避免致命错误:SwiftUI 中没有 ... 类型的 ObservableObject?
我将事情简化为这个非常简单的示例(一个普通的 SwiftUI 项目,仅编辑 ContentView 和 SceneDelegate 中的一行)。设置一个微不足道的 ObservableObject 和几个屏幕视图。使用最新的 Xcode 11.4 和模拟器很容易崩溃。
难道我做错了什么?或者这是一个 SwiftUI 错误?它最初似乎工作正常,然后重新导航到子视图时它崩溃了。虽然确切的行为是不确定的(可能会在第二次或第三次导航时崩溃!)
ios - 当 ObservedObject 在其他类中发生更改时如何在 ContentView 中运行方法 [Swift 5 iOS 13.4]
这是我的基本内容视图
这是我的模型
我不确定它是否可以访问?或者如果我可以从 View 观察 ObservableObject 的变化并运行任何方法?
提前致谢!
swift - SwiftUI 观察变化
概述:
- 我有一个名为 Player 的类和一个名为 Song 的类。
- 播放器包含一首歌曲
- 视图正在显示歌曲标题
目标:
当我更改 player.song.title 时,需要更新视图。
问题:
当歌曲的属性发生变化时,它不会自动更新视图。只有分配新歌曲时,才会反映更改。
我的尝试:
我做了 2 次尝试(下面的代码),都按预期工作。
问题:
- 有更好的方法吗?(这似乎是一个常见问题,人们会遇到。)我的尝试是否合理,尝试 2 是否更好?
- 还是我的设计存在根本缺陷?(我希望将歌曲放在播放器中,因为它代表了当前歌曲)。
原始代码(视图不会更新):
模型
看法
Attempt1 - 使用 CombineLatest
问题:随着歌曲中属性数量的增加,它的可扩展性不是很好。