问题标签 [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 投票
1 回答
77 浏览

swift - 当@Published 发布它包装的值时?

我有出版商

还有这段代码,它监听它

问题是 .onRecieve 什么时候执行?每次访问 feedData?或者每次更改 feedData 的任何属性时?当feedData 发生变化时,这个属性包装器如何知道?

0 投票
1 回答
624 浏览

swift - 转义闭包捕获变异的“自我”参数 (SWIFT 5)

我正在尝试使用@propertyWrapper 创建一个线程安全的结构,但是当我设置一个值时,我在操场上遇到了这样的错误。错误发生,只有当我改变asyncto sync,但我只需要有async功能

和我想使用它的类:

0 投票
0 回答
254 浏览

swift - 如何从 SwiftUI 中的 ARView 扩展更新 Observable 对象?

我正在尝试从 ARView 扩展更新 globalDataTransfer 类并将更改反映到 ArView。下面是 globalDataTransfer 函数

我的 ARViewContainer

我的 ARView 扩展是

内容视图:

谁能告诉我如何将这个 Observable 对象传递给 ARView,或者有什么方法可以从 ARView 扩展中获取 Val 变量并在我的 View Text 上定期更新它。

0 投票
2 回答
502 浏览

swift - 使用@ObservedObject 时是否可以在 Swift 中嵌套属性包装器?

我最近开始深入研究 SwiftUI、Combine 和属性包装器的美妙世界,并且正在努力将 @ObservedObject 与我编写的 @Injected 属性包装器结合起来,以便将依赖项注入到我的视图中。大多数时候我的@Injected 包装器工作正常,但是当与@ObservedObject 配对管理我的视图模型时,我收到“属性类型与'wrappedValue' 属性的类型不匹配”错误。

这是我的@Injected 属性包装器目前的样子:

这是我目前的用法:

以这种方式订购包装器,我收到:“属性类型 'MyModalViewModel' 与其包装器类型 'ObservedObject' 的 'wrappedValue' 属性不匹配”,而 MyModalViewModel 类确实从 ObservableObject 扩展。

如果我翻转包装器,它会编译,但 Swinject 会尝试解析包装的 ObservedObject 类,并且因为容器只是注册原始的 MyModalViewModel 类,所以此解析失败并且应用程序崩溃。

同时,通过直接赋值来赋值@ObservedObject 值:

我认为原始代码应该编译,看到 @Injected 将返回一个符合 ObservableObject 的包装值,就像 @ObservedObject 所期望的那样,尽管所有这些对我来说仍然是相当新的,所以我可能会遗漏一些东西。这里的任何输入将不胜感激。谢谢!!

0 投票
1 回答
737 浏览

ios - 如何在 Swift 中测试和模拟属性包装器?

假设我有一个非常常见的属性包装用例,使用UserDefaults.

我现在声明一个对象,它将保存我存储在UserDefaults.

现在,当我想在某个地方使用它时,比如说在视图模型中,我会有这样的东西。

这里很少出现问题。

  1. 在这种情况下,我似乎有义务使用.standard用户默认值。如何使用其他/模拟实例测试该视图模型UserDefaults
  2. 如何使用其他/模拟实例测试该属性包装器UserDefaults?我是否必须创建一个新类型,它是上述的干净副本DefaultsStorage,通过模拟UserDefaults并测试该对象?
0 投票
1 回答
41 浏览

swift - 如何在类型上使用属性包装器抽象单例?

在协议中,我想从函数创建单个实例,因此我使用容器来存储静态实例,如下所示:

稍后,一个类型可以符合它并替换默认实现,但也需要一个实例:

我希望通过使用属性包装器来封装这个创建单例的仪式,但是在类型上。我想做这样的事情:

有没有办法实现这个或类似的东西?

0 投票
2 回答
630 浏览

swift - 将自定义属性包装器与 @Published 相结合

我希望将自定义属性包装器应用于已经包装的变量,像(A)(B)@Published一样嵌套它们 (注意包装器的应用顺序)。
@Custom @Published var myVar
@Published @Custom var myVar

(A)的情况下,我得到了错误

'wrappedValue' is unavailable: @Published is only available on properties of classes

对于(B)

error: key path value type 'Int' cannot be converted to contextual type 'Updating<Int>'

两者都不是特别有用。任何想法如何使它工作?

最小代码示例

0 投票
1 回答
63 浏览

swift - @State 自动生成的下划线前缀成员变量

我注意到一个 Xcode 自动完成建议,它@State似乎不仅自动生成一个$-prefixed 成员来访问相应的Binding(众所周知),而且还有一个_-prefixed 成员,似乎暴露了实际的State包装器。

这让我想知道,它的用例是什么,文档中在哪里提到它?

在此处输入图像描述

0 投票
1 回答
171 浏览

swift - 可解码属性包装器的自动可解码合成

假设我有可解码的属性包装器:

编译器确实为以下内容综合了 init

为了测试这是否有效,我只是尝试解码空 JSON(即“{}”)

但是,string属性不被视为可选,即当没有string密钥时,我得到一个错误,即找不到密钥。

有解决办法吗?

0 投票
1 回答
78 浏览

swiftui - 将绑定传递给类型属性包装器的变量 - 失去基础类型

我正在尝试将绑定传递给使用属性包装器创建的变量。当我将绑定传递给另一个视图时,我似乎失去了对基础类型的访问。在下面的示例代码中,我演示了我可以更新原始绑定值,但当我将其绑定传递给另一个视图时不能: