问题标签 [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 投票
1 回答
106 浏览

javascript - 如何从 javascript 表达式中提取键路径

有人知道一种从 javascript 表达式中提取路径以在https://github.com/polymer/observe-js中使用的 PathObserver 的方法吗?

Polymer 定义了一条路径

我的目标是观察所有可能影响表达式结果的路径(低“观察”表达式)。我希望有一个简单的正则表达式,但是使用像 Esprima 或 Shift 这样的 js 解析器的代码也很好。

所以一个实际的例子:输入是

输出将是

快胜于完美;PathObserver 最终会告诉我路径是否无效。

0 投票
2 回答
4427 浏览

swift - 传递给#keyPath() 的非字符串“属性名称”可以独立保存吗?

我很高兴找到 Swift 3 的实现#keyPath(),这将消除拼写错误并在编译时强制关键路径确实存在。比手动输入字符串要好得多。

https://github.com/apple/swift-evolution/blob/master/proposals/0062-objc-keypaths.md

Swift 文档将传入的类型列为“#keyPath()属性名称”。

属性名称必须是对在 Objective-C 运行时可用的属性的引用。在编译时,键路径表达式被字符串文字替换。

是否可以独立保存这个“属性名称”,然后传递#keyPath()给创建一个字符串?

是否支持要求属于特定类型的属性名称?

最终目标是与需要NSExpression密钥路径的 API 进行交互。我想编写将有效属性名称作为参数的便捷方法,而不是随机键路径字符串。理想情况下,由特定类型实现的属性名称。

0 投票
4 回答
5651 浏览

ios - setValuesForKeysWithDictionary in Swift 4?

It seems like Swift 4 is implementing different method to (void)setValuesForKeysWithDictionary(), what is appropriate replacement to this function in Swift 4?

I have struct of

The dictionaryOfUsers is coming from data structure which value are presented dynamically based on the number of users in the database:

Now I want to use this function to create my user array to create dictionary in Swift 4:

and append to users

0 投票
2 回答
20270 浏览

swift - observeValue(forKeyPath:...) 的 Swift 4 方法

我一直在试图找到一个例子,但我所看到的在我的情况下不起作用。

什么相当于以下代码:

上面的代码有效,但我收到了来自 SwiftLink 的警告:

使用 Swift 3.2 或更高版本时,更喜欢新的基于块的 KVO API 和 keypaths。

如果您能指出我正确的方向,我将不胜感激。

0 投票
2 回答
3642 浏览

swift - 如何将 AnyKeyPath 转换为 WritableKeyPath?

我有一个枚举案例数组,其中每个案例都有一个keyPath属性,它返回AnyKeyPath与枚举案例同名的匹配类属性:

在上面的循环中,我想检查keyPathcase 的属性,看它是否是 a WritableKeyPath,如果是,则创建一个闭包来修改键路径访问的属性。

问题在于 aWritableKeyPath是泛型类型。我知道Root类型,但Value类型几乎可以是现有的任何类型。我可以为每种最可能的类型创建一堆案例:

但这是耗时、丑陋且难以维护的。

我确实尝试强制转换为动态类型,但这会产生编译器错误(Use of undeclared type 'valueType'):

我可以使用类型已经符合的协议,但由于某种原因,这也失败了:

那么,是否有可能在没有大量解包语句或不应该在生产中使用的奇怪技巧的情况下将 a转换AnyKeyPath为 a ?WritableKeyPath

0 投票
0 回答
333 浏览

swift - 是否可以从 CodingKey 获取 KeyPath?

有没有办法KeyPath使用 a 获得一个属性CodingKey?或者也许还有其他一些不涉及CodingKeys 的方法。那也很好。

如果有帮助,我只需要能够读取带有 a 的值KeyPath,而不是写入它。

我很确定有人会想建议一个手动创建的计算属性,如下所示:

那不是我要找的。我想要一个自动解决这个问题的解决方案。

0 投票
2 回答
1291 浏览

arrays - 如何在 Swift 4.0 中使用 WritableKeyPath 更新数组

在 Swift 4.0 中,我有一个结构数组。有没有办法使用 keyPaths 来更新数组中的所有项目,而无需像 map 或 forEach 那样手动迭代?类似于 objc 的东西[people makeObjectsPerformSelector: @selector(setName:) withObject: @"updated"];

像 people[keyPath: \[People].all.name] = "全部更新而不手动迭代"

0 投票
3 回答
2022 浏览

swift - Swift 泛型、约束和 KeyPaths

我知道 Swift 中泛型的局限性以及它们存在的原因,所以这不是关于编译器错误的问题。相反,我偶尔会遇到一些情况,似乎它们应该可以通过某些可用资源(即泛型、关联类型/协议等)的组合来实现,但似乎无法找到解决方案。

在这个例子中,我试图用 Swift 替代 NSSortDescriptor(只是为了好玩)。当您只有一个描述符时,它可以完美运行,但是就像 NS 版本通常所做的那样,创建一个 SortDescriptors 数组来对多个键进行排序会很好。

这里的另一个试验是使用 Swift KeyPaths。因为那些需要一个 Value 类型,而比较需要一个 Comparable 值,所以我在弄清楚在哪里/如何定义满足所有要求的类型时遇到了麻烦。

这可能吗?这是我提出的最接近的解决方案之一,但是,正如您在底部看到的那样,它在构建数组时不足。

同样,我理解为什么这不能按原样工作,但我很好奇是否有办法实现所需的功能。

0 投票
3 回答
2900 浏览

swift - 使用 Swift 4 的 KeyPath 引用 self

有什么方法可以参考selfSwift 4 的 new KeyPaths?

像这样工作正常,我们可以解决一个对象的属性:

但对我来说,解决一个对象本身似乎是不可能的:

我想应该有一些明显的方法吗?

编辑:

或者简单地说:

0 投票
1 回答
383 浏览

ios - 具有未定义类的可写键路径

我需要一组可写的键路径来编辑变量,但类是未定义的。我怎么能做这样的事情?

在这种情况下,尝试追加(\Class1.tag)得到这个错误:类型'AnyClass'(又名'AnyObject.Type')没有成员'threshold'