问题标签 [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 回答
439 浏览

swift - Swift propertyWrapper 无法将声明类型的值转换为指定类型的值

这是我的属性包装器:

这个变量 snapStatus 应该有一个布尔值,对吧?

但是编译器会抛出一个错误:

无法将“UserDefaultsBacked”类型的值转换为指定类型“Bool”

在此处输入图像描述

我做错了吗?

0 投票
2 回答
217 浏览

ios - 你如何编写一个只能调用一次的 Swift 完成块?

假设我有一个 Swift 类,它存储一个完成块,并执行一些异步任务。

我希望该块由首先完成的任务中的任何一个调用,但只有那个 - 我不希望在第二个任务完成时再次调用它。

我怎样才能以干净的方式实现这一点?

0 投票
1 回答
4636 浏览

ios - 属性包装器:“不能在属性初始化程序中使用实例成员;属性初始化程序在‘self’可用之前运行”

我正在尝试创建波纹管属性包装器

但是当我尝试使用它时,我得到“不能在属性初始化器中使用实例成员;属性初始化器在'self'可用之前运行”

有没有办法通过这个错误?

0 投票
0 回答
161 浏览

ios - CurrentValueSubject 的属性包装器 - 内存管理

我想创建一个property wrapperfor CurrentValueSubject。我已经这样做了:

这行得通,但我想用它来改变一点——使用结构而不是类。为此使用 struct 的问题是有时我会Simultaneous accesses出错。而且我知道为什么,当sink我从这个发布者那里尝试从包装值中读取值时,就会发生这种情况。因此,例如使用这样的代码:

而且我或多或少知道为什么 - 因为当projectedValue执行它的观察时,包装的值仍在设置它的值的过程中。在课堂上这没问题,因为它只会更改值,但是使用 struct 它实际上会修改结构本身,所以我试图同时对其进行写入和读取。

我的问题是 - 是否有一些聪明的方法可以克服这个问题,同时仍然使用结构?我不想dispatch async

我也知道它的@Projected工作原理与此类似propertyWrapper,但有很大的不同 -Projected执行 on willSet,while CurrentValueSubjecton didSetProjected无论如何都有同样的问题。

我知道我可以读取闭包内的值,但有时我将它与各种函数调用一起使用,最终可能会使用它self.test

0 投票
1 回答
99 浏览

swift - 传递带有包装属性的对象不允许在(设置)上编译

我按照本指南使用用户默认值创建包装属性:

https://www.vadimbulavin.com/advanced-guide-to-userdefaults-in-swift/

现在,我有 LocalStorage 类,它将在教程结束时采用这个“Storage()”类,然后访问该对象的引用以从 UserDefaults 值中获取数据。出于某种原因,当我在我的代码中设置一个字符串时,它不再构建/编译。它适用于布尔值。下面的一个例子:

0 投票
1 回答
323 浏览

swift - 当 self 尚未初始化时,如何在属性包装器中使用现有属性?(斯威夫特用户界面)

我在属性包装器中有一个带有两个变量的结构。其中一个变量应该是从另一个变量中计算出来的。当我尝试这样做时,我收到以下错误:

不能在属性初始值设定项中使用实例成员“名称”;属性初始化程序在 'self' 可用之前运行。

我尝试为这些变量分配一个临时值,然后在自定义init()函数中重新分配它们,但这似乎不起作用。我制作了代码的简化版本,看看是否可以隔离问题。

我注意到,当我将 nameTag 更改为@ObservedObject,而不是@State时,它能够被正确地重新分配。虽然我不相信我可以将名称更改为@ObservedObject. 谁能告诉我我做错了什么?

0 投票
2 回答
126 浏览

ios - SwiftUI 代码将一个对象数据分配给数组中的所有其他对象?

我正在尝试构建一个记事卡应用程序,目前我正在用户可以输入记事卡的屏幕上工作。一切正常,除了当我为一张记事卡输入术语和定义时,它会更新所有其他记事卡,使它们具有相同的术语和定义。非常感谢您的帮助,不胜感激!:)

这是我的代码的预览

0 投票
1 回答
299 浏览

swift - 通过属性包装器崩溃的嵌套依赖注入

按照这个它工作正常。

但是,当我尝试用同样的方法解决嵌套依赖项时(依赖注入的类又具有依赖项——在我们的例子中是 NetworkService),它崩溃了。我在这里做错了什么?任何帮助将不胜感激。

实时场景

你可以在操场上运行的代码

崩溃日志:-

错误:执行被中断,原因:EXC_BAD_INSTRUCTION(代码=EXC_I386_INVOP,子代码=0x0)。进程一直停留在被中断的地方,使用“thread return -x”返回表达式求值前的状态。

0 投票
3 回答
100 浏览

swift - Swift - 指定符合泛型类型参数的协议

我想要做的是有两个泛型类型参数,其中一个是特定类型,另一个是协议,如下所示:

这样,可以隐藏实际类型,只暴露协议。

现在这不起作用,因为P它是一个非类、非协议类型,所以T不能被限制在它上面。

有没有解决的办法?

0 投票
1 回答
132 浏览

ios - 在超类拥有的属性中应用属性包装器

我已经为 UIView、UILabel 等 UI 组件的主题创建了自己的属性包装器。

在这种情况下,我会得到一个编译错误“不能用存储的属性'view'覆盖”

我知道视图是 UIViewController 的一个属性。您知道是否有任何可能的方法将属性包装器应用于存储的(超类)属性?任何建议将不胜感激:) 非常感谢!