问题标签 [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.
swift - Swift 4 KeyPath 处理不同类型的对象
我有 2 种类型,A
它们B
实现相同的方法并具有相同的属性。我已经定义了一个扩展来获取每个A
和的子属性中的值B
。我想知道是否有办法将这 2 个扩展减少到 1 个方法。想象一下有更多的类型A
,B
所以代码重复问题变得更糟。
更新:A
并B
与许多其他类似的人一起生成。最初的计划是完全避免为A
or编写扩展B
。我不知道这是否可能,但有人告诉我我可以为此使用 KeyPaths。属性名称必须不同。这是代码生成的副产品
swift4 - 嵌套类的 KeyPath
如何从嵌套类创建 KeyPath?我不知道如何使用反斜杠访问嵌套类。
示例代码:
提前致谢!
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
的子类也是如此。
swift - CoreData更新关系方法
我有两个实体 -Quote
并且Customer
(一个客户可以有很多报价)
假设我有一个名为的托管对象,quote
但我想更新客户地址。是否有让我到达客户地址的密钥路径?如:
swift - 根据参数创建 keypath
我得到了这个代码:
我有通用类,我需要在通用具体类型(如 Person)上创建键路径,但我不确定如何基于参数创建键路径。我试过了:
但它不编译。
swift - Swift keyPath 与协议
我了解 keyPaths 的基本思想,但我不了解它的用例。如果您已经知道实例的类型,则可以轻松访问它们的属性。如果你不这样做,协议已经支持只读、读写属性。有人可以解释一下我错过了什么吗?除了 keyPaths 或者当 keypath 比协议更好时,我们不能用协议做什么?
swift - 识别(通过:\.self) - 它有什么作用?
在此视频中:https ://developer.apple.com/videos/play/wwdc2019/103/ ,以下代码片段显示在 15:30 左右:
它有什么作用?self
指向哪里?当前对象 ( TraitCell_Preview
)?它甚至无法在我的计算机中编译,因为common
它不是ContentSizeCategory
. 我以为我以前在一次SwiftUI
谈话中看到过它(\.self
)。Keypath
不过,这并不是我在 Swift 中最好的东西。
我理解ForEach
的元素需要Identifiable
。self
(又名TraitCell_Preview
对吗?)只符合PreviewProvider
所以不符合Identifiable
(如果符合的私有_PreviewProvider
协议PreviewProvider
不符合Identifiable
,则不确定,因为我看不到代码)。
代码片段中有什么\.self
,它指向哪里?
swift - “__lldb_expr_18”是什么意思?
我正在操场上使用功能性 swift 库,并使用键路径进行一些操作。
当我运行时: prop(\User.favoriteFoods) <<< map <<< prop(.name)
我得到:((字符串)->字符串)->(__lldb_expr_18.User)->__lldb_expr_18.User
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' 是不可变的。
我不确定这些部分键路径与数组的交互。任何有关如何解决此问题的帮助(即能够以这种方式修改设置中的属性)将不胜感激。
ios - 带有 UIButtons 的 Swift Keypath
我正在尝试获取类中 IBOutlet 的选定属性的键路径。但是得到:
Type 'UIButton?' has no member 'isSelected'
直接访问 UIButton.isSelected 键路径有效,但不能满足我的用例。
我错过了什么?