问题标签 [property-wrapper]

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 回答
642 浏览

swiftui - SwiftUI: How to update published property of one class (ObservableObject) with published property of a location manager class?

I want to update the Published property of my ChallengeManager class with data passed in from LocationManager. Here is the simplified code with the relevant bits:

LocationManager

ChallengeManager

Finally, the ContentView:

(To be honest, I can get the results I want by adding an ObservedObject for the LocationManager in the View and then passing the values into a func there. But I don't like the idea of doing this for multiple views. And I also want loadChallenge() to do more heavy lifting. It seems to me that it should be the single source of truth. No?)

The problem:

If I try to access challengeManager.challengeToDisplay inside the ContentView, the value is always nil. Print statements in the loadChallenge() func tell me that the value from the locationManager is being received correctly. But @Published var challengeToDisplay is not changing. Can someone please tell me what I am doing wrong?
Thanks!

0 投票
1 回答
72 浏览

swift - 如何在使用 MVVM 架构时为已发布的属性包装器创建可选参数?

在我学习 SwiftUI 的过程中,我真的在为这种 MVVM 架构而苦苦挣扎。话虽如此,我有一个项目,我一直在努力学习这一点。在其他人的帮助下,我已经走到了这一步。

当前的问题是,我需要使@Published封装在视图模型上的属性具有可选参数。不幸的是,我尝试的一切都不起作用。我要做的是获取用户在 TextFields 上输入的内容并将它们用于数学函数。

模型.swift

查看模型

如上所述,当前的问题是@Published属性包装器需要重量和高度。理想情况下,我想制作那些通过用户 TextField 输入填充该数据的选项。

我尝试阅读大量文档、教程和指南。不幸的是,我仍然无法掌握如何将其应用于我的项目的概念。

0 投票
1 回答
125 浏览

ios - 动态键属性包装器

我编写了一个简单的属性包装器,以便在 UserDefaults 中轻松获取和设置用户首选项。

现在这适用于静态首选项,但假设我要支持多个用户,并且每个用户都可以存储他们的设置。

这给了我警告Cannot use instance member 'id' within property initializer; property initializers run before 'self' is available。有没有办法解决这个问题,所以我可以轻松地使用这个属性包装器和动态键?

0 投票
1 回答
70 浏览

swiftui - 如何将依赖项设置为@propertyWrapper 成为@ObservableObject?

我有一个名为 UserDefaults 的第一个 @property 包装器@UserDefault(key: .isSignedIn, defaultValue: false) var isSignedIn: Bool。通过这种方式使用它作为发布者可以正常工作,$isSignedIn以在单独使用时更新我的​​ SwiftUI 视图。但我想在视图模型中设置依赖项。

现在,为了保存 UserDefaults 值,我创建了一个依赖集作为 @propertyWrapper 调用@Injection(\.localDataManager) var localDataManager,也将在单元测试中使用与名为的键关联的下标解决方案InjectedDependency[\.localDataManager] = LocalDataManagerMock()

问题是LocalDataManager该类不是一个@ObservableObject并且不会随着时间的推移更新我的 SwiftUI 视图。

  • 如何LocalDataManager使用@ObservableObject这个InjectedDependency单元测试解决方案?

带有视图模型的 SwiftUI 视图:

我想用作@ObservableObject

@UserDefault代码:

InjectedDependency单元测试的解决方案:

0 投票
2 回答
98 浏览

swift - 如何更新 Observable 对象中的数组元素

抱歉,如果我的问题很愚蠢,我是编程的初学者。我有一个从我的视图模型数组生成的列表中指向详细视图的导航链接。在详细视图中,我希望能够改变点击元素的属性之一,但我似乎无法弄清楚如何做到这一点。我不认为我解释得很好,所以这里是代码。

在详细视图中,我正在尝试更新该特定活动的完成计数,并让它更新我的视图模型。我上面尝试的方法可能没有意义,显然不起作用。我只是把它留下来展示我的尝试。

感谢您提供任何帮助或见解。

0 投票
2 回答
196 浏览

swiftui - 使用非零值初始化可选的 @AppStorage 属性

我需要一个可选的@AppStorage字符串属性(用于NavigationLink选择,需要可选),所以我声明

我需要它以非零的默认值开始,所以我尝试了:

但这不会编译。

我也试过:

但这只会在应用程序启动时覆盖实际的持久值。

有没有办法用默认的非零值启动它,然后让它像往常一样持续存在?

0 投票
2 回答
75 浏览

swift - 从视图外的函数访问@StateObject

我有一个符合“ObservableObject”协议的类(WatchlistClass),它包含一个@Published var(监视列表)。反过来,var 包含一系列股票和一些信息([StockInformation]),它应该用当前的股票价格和东西更新我的视图(WatchlistView)。该部分工作得很好,但是该类应该访问视图中的@StateObject 以更改数据。直接在类中访问它是行不通的,因为它不会从@StateObject 读取数据。我尝试直接访问视图中的@StateObject,但这也创建了一个具有空数组的类的新实例。在 @Published var 上使用“静态”会引发错误。我不能,为了我的一生,弄清楚如何在视图中直接访问 @StateObject 以读取和修改它所保存的数据。任何帮助,将不胜感激。

0 投票
2 回答
95 浏览

firebase - 如何使用变量初始化新的 Firebase @FirestoreQuery 属性包装器?

我使用新的 @FirestoreQuery 属性包装器,它使用下面的代码。但我需要使用它/用变量初始化它,我该怎么做(见下文我想要做什么)?

我想做但它不起作用:

我收到了这些错误:

  • 不能在属性初始化器中使用实例成员“路径”;属性初始化程序在“self”可用之前运行...

  • 不能在属性初始化程序中使用实例成员“itemLimit”;属性初始化程序在“自我”可用之前运行

0 投票
1 回答
143 浏览

swift - 如何将@propertyWrapper 用于带有可选键的Decodable?

我正在使用属性包装器将字符串“true”和“false”解码为布尔值。我还想让密钥成为可选的。因此,如果 JSON 中缺少密钥,则应将其解码为 nil。不幸的是,添加属性包装器会破坏这一点,Swift.DecodingError.keyNotFound而是抛出 a 。

知道如何解决这个问题吗?

0 投票
1 回答
46 浏览

swift - SwiftUI 中的@propertywrapper

我创建了一个@propertyWrapper 来限制变量可以达到的数量。我在 SwiftUI 视图中使用增加变量值的按钮进行了尝试,它可以工作,变量在初始化程序中设置的最大数处停止。但是,如果我使用 Textflied 尝试它不起作用,如果我插入的数字高于一组数字,则不会发生任何事情,它会让我这样做。我该如何解决这个问题,我知道这个问题与绑定有关,但我不知道它到底是什么,这里是代码: