问题标签 [keypaths]

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

swift - Swift 4 KeyPath 处理不同类型的对象

我有 2 种类型,A它们B实现相同的方法并具有相同的属性。我已经定义了一个扩展来获取每个A和的子属性中的值B。我想知道是否有办法将这 2 个扩展减少到 1 个方法。想象一下有更多的类型AB所以代码重复问题变得更糟。

更新:AB与许多其他类似的人一起生成。最初的计划是完全避免为Aor编写扩展B。我不知道这是否可能,但有人告诉我我可以为此使用 KeyPaths。属性名称必须不同。这是代码生成的副产品

0 投票
1 回答
534 浏览

swift4 - 嵌套类的 KeyPath

如何从嵌套类创建 KeyPath?我不知道如何使用反斜杠访问嵌套类。

示例代码:

提前致谢!

0 投票
0 回答
97 浏览

objective-c - 嵌套 NSMutableDictionary 对象的 valueForKeyPath 失败

在我的课堂上,我有两个数据对象:“dataDict”(属性)和“prevDict”(实例变量),它们都是NSMutableDictionary对象。在这些多级字典中,所有“节点”本身都是NSMutableDictionary对象,所有“叶子”都是 NSString 值。

大多数情况下,这些词典会比较相同。但是,当新传入的数据不同时,我想通过 KVO 捕获这些更改,然后保存新传入的字典。递归调用是触发所有 KVO 更改的东西。

下面是递归确定新传入数据(在属性“dataDict”中)是否与“prevDictionary”中的不同的代码。最初的调用是:

如果给定的叶子有变化,它应该在字典中更新它并产生一个 KVO 通知。

示例“newPath”字符串值可以是“dataDict.group.name.points”——其中“key”值是“points”。

在注意到的调试器断点中,我可以看到“curStr”和“newStr”的值,例如“120”和“121”,这两个值分别从prevDict和正确获得dataDict

如果我从给定的 keyPath 获得一个值,然后使用该相同的密钥路径再次设置它,为什么我会得到一个NSUnknownKeyException

我确实知道我所涉及的所有字典都是可变的。

PS:为了递归,我测试了一个NSDictionary很好的类,它NSMutableDictionary的子类也是如此。

0 投票
1 回答
66 浏览

swift - CoreData更新关系方法

我有两个实体 -Quote并且Customer(一个客户可以有很多报价)

假设我有一个名为的托管对象,quote但我想更新客户地址。是否有让我到达客户地址的密钥路径?如:

0 投票
2 回答
198 浏览

swift - 根据参数创建 keypath

我得到了这个代码:

我有通用类,我需要在通用具体类型(如 Person)上创建键路径,但我不确定如何基于参数创建键路径。我试过了:

但它不编译。

0 投票
1 回答
204 浏览

swift - Swift keyPath 与协议

我了解 keyPaths 的基本思想,但我不了解它的用例。如果您已经知道实例的类型,则可以轻松访问它们的属性。如果你不这样做,协议已经支持只读、读写属性。有人可以解释一下我错过了什么吗?除了 keyPaths 或者当 keypath 比协议更好时,我们不能用协议做什么?

0 投票
2 回答
2181 浏览

swift - 识别(通过:\.self) - 它有什么作用?

在此视频中:https ://developer.apple.com/videos/play/wwdc2019/103/ ,以下代码片段显示在 15:30 左右:

它有什么作用?self指向哪里?当前对象 ( TraitCell_Preview)?它甚至无法在我的计算机中编译,因为common它不是ContentSizeCategory. 我以为我以前在一次SwiftUI谈话中看到过它(\.self)。Keypath不过,这并不是我在 Swift 中最好的东西。

我理解ForEach的元素需要Identifiableself(又名TraitCell_Preview对吗?)只符合PreviewProvider所以不符合Identifiable(如果符合的私有_PreviewProvider协议PreviewProvider不符合Identifiable,则不确定,因为我看不到代码)。

代码片段中有什么\.self,它指向哪里?

0 投票
0 回答
87 浏览

swift - “__lldb_expr_18”是什么意思?

我正在操场上使用功能性 swift 库,并使用键路径进行一些操作。

当我运行时: prop(\User.favoriteFoods) <<< map <<< prop(.name)

我得到:((字符串)->字符串)->(__lldb_expr_18.User)->__lldb_expr_18.User

0 投票
0 回答
93 浏览

arrays - 在 Swift 中混合部分 KeyPath 和数组

抱歉,如果这是微不足道的,但我还没有完全理解 KeyPaths。我有一个类(ContainerClass),其中有一个类数组(mySettings)。mySettings 类有两个变量(颜色和名称)。mySettings 的数组是在运行时定义的。我正在尝试通过 KeyPaths 修改 mySettings 类中的属性。以下代码是我想要实现的简化版本:

我需要两个单独的 KeyPath:一个用于定位 ContainerClass 中包含的数组的一个特定 mySettings 元素,另一个 KeyPath 用于定位 Settings 类中的两个属性之一。在运行时,程序将确定数组的哪个元素以及必须修改的属性。

我可以读取属性(在我的示例中,通过:let target = myClass[keyPath: kp][0][keyPath: kp2[0]]),但我无法通过尝试修改它,例如:myClass[ keyPath: kp][0][keyPath: kp2[0]] = 128。我收到一个错误:无法通过下标分配:'myClass' 是不可变的。

我不确定这些部分键路径与数组的交互。任何有关如何解决此问题的帮助(即能够以这种方式修改设置中的属性)将不胜感激。

0 投票
1 回答
405 浏览

ios - 带有 UIButtons 的 Swift Keypath

我正在尝试获取类中 IBOutlet 的选定属性的键路径。但是得到: Type 'UIButton?' has no member 'isSelected'

直接访问 UIButton.isSelected 键路径有效,但不能满足我的用例。

我错过了什么?