问题标签 [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.
swift - 被包装对象的访问名称,在 Swift 属性包装器实现中
我正在使用 Swift 属性包装器来定义如下内容:
在属性包装器的实现中,我想以字符串的形式访问变量 foo 的名称。像这样的东西:
建议?
swift - 多个文件中带有 Codable 的属性包装器的 Swift 编译错误
对于在多个文件中可编码的属性包装器,编译失败。
我在下面的 Swift 源代码中找到了测试代码:
并在我的测试项目中使用它们:
但是编译失败并出现错误:
如何解决?
swift - Property Wrapper @Lazy 变量线程安全吗?
我们现在有了一种创建惰性变量的新方法。它在swift-evolution/proposals/0258-property-wrappers.md中有描述:
它是线程安全的实现吗?如果不是,如何重现非线程安全行为?
ios - 如何检测类型对于通用 propertyWrapper 是可选的
我正在为UserDefaults
.
我想要实现的是:
- 将非零值设置为属性会将其存储在用户默认值中。
- 设置 nil 将从 UserDefault 中删除对象。
但是下面的代码会引发编译器错误:
条件绑定的初始化程序必须具有可选类型,而不是“T”
有什么方法可以识别 T 是可选的吗?因为我可以从 UserDefaults 中删除密钥。如果不是如何达到预期的输出?
swift - 使用 Swift @propertyWrapper 作为动态默认值?
我需要一个 Swift 属性——如果该值尚未设置——默认为另一个值。
这可以使用后备存储私有属性来实现。例如,对于num
应该默认为 global的属性defaultNum
,它的工作方式如下:
这行得通,但是对于我们代码中的一个常见模式,每个这样的属性都有很多样板文件。
使用 Swift 属性包装器,是否可以更简洁地做到这一点?
什么行不通_
请注意,因为我们希望默认值是动态的,所以静态初始化器将不起作用。例如:
swift - 为计算属性添加 @Published 行为
我正在尝试制作一个ObservableObject
具有包装UserDefaults
变量的属性。
为了符合ObservableObject
,我需要用 包装属性@Published
。不幸的是,我不能将其应用于计算属性,就像我用于UserDefaults
值一样。
我怎样才能让它工作?我必须做什么才能实现@Published
行为?
ios - 无法在 Swift 中跨模块访问属性包装器
在我的Common
模块(框架项目)中有以下用户默认值的属性包装器,
在我的App
模块(主项目)中,我声明要使用的客户端MyUserDefaultWrapper
并使用类似,
它产生构建错误。
未知属性“MyUserDefaultWrapper”
如何摆脱这个问题?
binding - SwiftUI 我可以使用 Binding 和 @Binding 属性包装器设置自定义绑定吗?
如何在 SwiftUI 视图上使用Binding(get: { }, set: { })
带有属性的自定义绑定。@Binding
我已经成功地将这个自定义绑定与@State
变量一起使用,但不知道如何@Binding
在子视图初始化程序中应用它。我需要它来观察@Binding
父类分配给属性的更改,以便执行具有一些副作用的代码!
ios - 使用 PropertyWrapper 时的同时访问
我想创建一个property wrapper
,它会存储 a callback block
,并在每次它的值发生变化时执行它。简单的东西KVO
。它工作正常,但有一个问题。如果我在此回调块中使用属性本身,则会收到错误消息:
据我了解,这是因为属性本身仍在被写入,而该块正在执行,这就是它无法读取的原因。
让我们添加一些代码来说明我的意思:
并且AppDelegate
:
我有一些解决方法,但由于各种原因,没有一个主题是我真正需要的。
如果我改为
block
从 this中访问值block argument
,并在 value 中传递此参数didSet
,那么它可以正常工作。但这迫使我总是以这种方式使用它,我想将它与包含各种其他回调的代码一起使用,有时我也能够直接访问这个值会更方便。我可以
callback block
异步执行(DispachQueue.main.async { self.block?(value) })
。但这对我来说也不是最好的。改为使用
combine
。我可能会,但我也想暂时保留这个功能。我也只是对这个问题感到好奇。
这可以以某种方式克服吗?什么变量实际上导致了这个read-write
访问错误?这是内部的值propertyWrapper
还是propertyWrapper
本身的结构?我认为是propertyWrapper struct
访问导致了这种情况,而不是它的内部价值,但我不确定。
swift - 更新 View Swift 的自定义属性包装器
Xcode 11.3,斯威夫特 5.1.3
我目前正在尝试创建一个自定义属性包装器,它允许我将变量链接到 Firebase 数据库。这样做时,为了更新视图,我首先尝试使用@ObservedObject @Bar var foo = []
. 但是我收到一个错误,即不支持多个属性包装器。接下来我尝试做的事情,老实说是理想的,是尝试让我的自定义属性包装器在更改时更新视图本身,就像@State
and一样@ObservedObject
。这既避免了需要向下两层访问底层值,又避免了使用嵌套属性包装器。为此,我检查了 SwiftUI 文档,发现它们都实现了该DynamicProperty
协议。我也尝试使用它但失败了,因为我需要能够更新视图(调用update()
) 来自我的 Firebase 数据库观察者,我不能这样做,因为.update()
它正在变异。
这是我目前的尝试:
使用示例:
但是,当我尝试使用它时,即使我肯定.childAdded
正在调用观察者,视图也不会使用 Firebase 的值进行更新。
我解决此问题的一个尝试是将所有这些变量存储在一个本身符合ObservableObject
. 这个解决方案也是理想的,因为它允许在我的应用程序中共享被观察的变量,防止同一日期的多个实例并允许单一的事实来源。不幸的是,这也没有使用获取的值更新视图currentValue
。
有没有办法制作一个自定义属性包装器,它也会更新 SwiftUI 中的视图?