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

ios - SwiftUI 中的可选 @ObservableObject

我想在 SwiftUI 中有一个可选的@ObservedObject,但我不断收到编译时错误。

这是一些最小的可重现代码。

0 投票
0 回答
244 浏览

foreach - 如何在 SwiftUI 列表中使用 .focusedValue

我改编了博客文章中的一个示例,它允许我与屏幕上的另一个视图共享与 ForEach 中选定元素关联的数据。它设置了FocusedValueKey一致性:

然后它有一个带有按钮的 ForEach 视图,其中焦点按钮使用.focusedValue修饰符设置 NotePreview 的值:

这适用于 ForEach,但在将 ForEach 替换为 List 时无法正常工作。我怎样才能让它与 List 一起使用,为什么它不能开箱即用?

0 投票
1 回答
520 浏览

ios - 原子属性包装器仅在声明为类而不是结构时才有效

我在 Swift 中创建了一个“锁”,并为我的 Swift 类创建了一个使用该锁的 Atomic 属性包装器,因为 Swift 缺少 ObjC 的atomicproperty 属性。

当我在启用线程清理器的情况下运行测试时,它总是在使用我的 Atomic 属性包装器的属性上捕获数据竞争。

唯一有效的是将属性包装器的声明更改为类而不是结构,这里的主要问题是:为什么它有效!

print在属性包装器中添加了 s 和 lockinit来跟踪创建的对象的数量,它与 struct/class 相同,尝试在另一个项目中重现问题,也没有用。但我会添加与问题相似的文件,并让我知道它为什么起作用的任何猜测。

原子属性包装器

模型(数据竞争应该发生在publicVariable2此处的属性上)

更新 1: 完整的 Xcode 项目:https ://drive.google.com/file/d/1IfAsOdHKOqfuOp-pSlP75FLF32iVraru/view?usp=sharing

0 投票
1 回答
106 浏览

swift - 当我通过鼠标单击更改 SwiftUI 列表的选择时,@Published 属性的 didSet 被调用了两次

我将 SwiftUI 用于我的 Mac OS 应用程序。当我通过鼠标单击更改SidebarView中列表的选择(从InboxToday)时,didSet被调用了两次(侧边栏正文也计算了两次)。如果我用箭头(向下|向上)更改选择,则调用一次didSet 。是错误吗?我为我的英语感到抱歉。

双列应用

日志:

  • 用鼠标点击:

willSet = 可选(MiniTodo.NavigationItem.inbox)2021-04-18 00:36:20 +0000

didSet = 可选(MiniTodo.NavigationItem.inbox)2021-04-18 00:36:20 +0000

willSet = 可选(MiniTodo.NavigationItem.inbox)2021-04-18 00:36:20 +0000

didSet = 可选(MiniTodo.NavigationItem.today)2021-04-18 00:36:20 +0000

  • 带箭头:

willSet = 可选(MiniTodo.NavigationItem.inbox)2021-04-18 00:37:11 +0000

didSet = 可选(MiniTodo.NavigationItem.today)2021-04-18 00:37:11 +0000

0 投票
0 回答
39 浏览

swift - @FetchRequest 模拟使用标准观察记录计数

我想创建一些解决方案,允许使用新@propertyWrapper机制按照特定标准观察记录数。我想找到优雅的方法来解决它。

  1. 我的解决方案有什么可以改进的?
  2. 如何使用@Environment(\.managedObjectContext) var viewContext而不是共享实例?

如果我使用 Environment 的实例,我会遇到这样的错误:

由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“+entityForName:nil 不是用于搜索实体名称“Todo”的合法 NSPersistentStoreCoordinator”

我的解决方案:

用法:

0 投票
0 回答
35 浏览

swift - 初始化不调用属性包装器的覆盖类函数

我有一个基类和一个派生类...基类有一个类函数userDefaultKeyPrefix(),它使用包装器指示用户默认存储的用户默认键

但是AdvancedManager该类最终以BaseManager类值userDefaultKeyPrefix() "BASE.someVar"而不是"ADVANCED.someVar"

为什么会发生这种情况以及如何达到预期的结果,所以关键是由班级给出

someVar 的 init 被称为 Base 类,而不是 Advanced


更新:此波纹管按预期工作(关键是“ lazy”),但破坏了属性包装器的干净代码

欢迎任何更好的解决方案作为答案

0 投票
1 回答
154 浏览

swift - 在 swift 中使用 @propertyWrapper 替代隐式解包可选

当初始化程序注入不起作用或为示例创建 mvvm 模块时,我发现自己使用了很多隐式展开的选项:

不仅它看起来不太好,而且如果我需要在显式解包的可选变量上使用 switch 语句,总是强制解包也是一种痛苦。

有什么方法可以摆脱隐式展开的可选选项,例如@properyWrapper在 swift 5 中使用?

0 投票
0 回答
47 浏览

swift - 属性类型“MyViewModel”与其包装器类型的“wrappedValue”属性不匹配

我有一个属性包装器来避免处理隐式展开的选项。

它工作得很好,除非我尝试使用自定义包装器来处理弱属性:

假设我有以下协议:

现在看起来像这样:

但是当我使用属性包装器时:

它返回错误“属性类型'MyViewModel 与其包装器类型'WeakMaybeUninitialized'的'wrappedValue'属性不匹配”

即使 MyViewModel 实际上符合 AnyObject,所以我不明白会发生什么。

你知道为什么吗?

0 投票
1 回答
89 浏览

swift - 在哪里使用@StateObject 和 ObservableObject?

我正在学习 swiftUI,我对 @StateObject 和 @ObservableObject 何时使用它们以及在何处使用它们感到困惑。

0 投票
1 回答
135 浏览

ios - Environment property wrapper throws +entityForName: nil is not a legal NSPersistentStoreCoordinator for search entity name

为什么 entityForNameEnvironment(\.managedObjectContext).wrappedValue总是为零?我收到这个错误+entityForName: nil is not a legal NSPersistentStoreCoordinator for searching for entity name 'Project'

@Environment(\.managedObjectContext) var viewContext没有得到这个错误。但是我需要使用需要NSManagedObjectContext传递的控制器来初始化视图。

有人可以帮助理解为什么这两行不返回相同的对象吗?还是一样?

的初始化器ContentViewController