问题标签 [swift-keypath]

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 投票
0 回答
112 浏览

swift - switch语句中的速记键路径?

我有一个方法,它为一个类型提供一个关键路径,但是当我尝试使用关键路径的简写版本时,它给了我一个编译错误。

这是我正在尝试做的事情:

switch语句中,是否可以做case \.prop1而不是指定根?当我尝试这个时,我得到这个错误:

default即使我已经指定了该类型的所有属性,它也迫使我指定一个案例。这也有原因吗?谢谢你的帮助。

0 投票
0 回答
207 浏览

core-data - 如何在 Swift 中将 NSPredicate 与计算属性一起使用?

我正在尝试使用 NSPredicate 在 SwiftUI 中创建 @FetchRequest,如下所示:

不幸的是,我的isRunning属性是一个计算属性,如下所示:

问题是 NSPredicate 会崩溃,因为它在解析谓词时找不到计算属性的字符串。有没有办法让这成为可能?我很想使用它,因为它可以让我创建一个不错的用户体验。

注意:我无法测试 activeStep 作为替代方案,因为它也是一个计算属性,具有更复杂的逻辑。

0 投票
1 回答
36 浏览

swift - 使用协议定义具有不同值的 KeyPath 集合

假设您想要跟踪一个或多个唯一标识符。在这种情况下,A有两个属性被认为是唯一的A,而B只有一个属性是唯一的B

如果只有一个唯一键,我们可以这样做:

...但这将我限制在一把钥匙上。

0 投票
1 回答
301 浏览

swift - 以最简单的形式在 map() 中应用 KeyPath

错误:

在没有更多上下文的情况下,表达式的类型是模棱两可的

为什么它不起作用?似乎应该如此。
如果不是这样,我们还能如何摆脱这里丑陋的 { $0 } 呢?

也许compactMap的例子会更香))

错误:

无法将 'WritableKeyPath<_, _>' 类型的值转换为预期的参数类型 '(Int?) throws -> ElementOfResult?'

0 投票
1 回答
463 浏览

swift - 在 Swift 中获取密钥路径的编码密钥

我所拥有的:具有不同属性的可编码结构。

我想要的:一个函数,当它以 Json 编码时,我可以在其中获取属性的确切名称。我认为最有前途的方法是使用 Keypath,但我不知道如何以及是否可能。谢谢!

0 投票
0 回答
56 浏览

swift - 符合协议时类型别名声明的冗余重复

这是一个非常有用的协议,可以帮助我们在创建自定义集合时减少样板代码。
假设我们的结构包装了一个字典。我们希望它像那本字典一样成为一个集合。
我们应该为字典属性提供 keyPath 并应用于协议。它有效!
用法示例和我的问题:

它完美地工作。但是我们为什么要重新声明元素和索引类型别名!?在这篇文章的第一行代码中,我们明确定义了元素和索引:

接着:

如果我删除该重新声明,我会收到一个我不明白的编译错误:

'PathCollection' 要求类型 'Slice' 和 'Dictionary<String, Int>.Element'(又名 '(key: String, value: Int)')是等价的

0 投票
1 回答
296 浏览

swift - 在 Swift 5 的通用方法中展开可选类型

我正在尝试B从 type 的实例创建 type 的实例A,但是原始类型的某些属性A是可选的,B如果发生这种情况,创建应该会引发错误。

我的问题是我不知道类型T是否是可选的,如果是,如何打开它。我正在尝试以下方法,但 swift 无法判断类型应该是什么......

下面的例子是悔恨的,真实的样本有将近一百个值。

我知道以下内容会起作用,但我不想在代码中重复这 100 次?

一定有一些......我没有想到的快速的方式来做到这一点。

0 投票
3 回答
113 浏览

swift - 在 Swift 中,如何实现一个通用系统,通过为不同的键路径注册处理器来处理类型?

我想实现一个系统,允许我通过为不同的关键路径注册处理器来一般地处理类型。

系统的一个特征应该是composition,因此每个处理器都应该扩展一个通用的通用协议Processor

使用示例:

0 投票
2 回答
104 浏览

ios - 将 KeyPaths 存储在 Dictionary/HashMap 中

我在散列一个ReferenceWritableKeyPath. 散列函数似乎ReferenceWritableKeyPath在散列密钥路径时也考虑了 的通用属性。我已经包含示例代码来说明为什么这是一个问题:

如果你运行上面的代码,你会注意到 hash1 和 hash2 是不同的,尽管它们是指向 UILabel 相同属性的路径。

发生这种情况是因为第一个ReferenceWritableKeyPath有一个Valuethat isUIColor而第二个ReferenceWritableKeyPath有一个Valuethat isOptional<UIColor>

我的项目要求将ReferenceWritableKeyPaths 存储在字典中,以便关联对象 (UILabel) 的每个属性只有一个 keyPath。由于哈希值不同,这意味着相同的路径将在字典中存储为 2 个不同的键。

有谁知道我可以让它工作的方法?

~提前谢谢

0 投票
1 回答
152 浏览

swift - 存储异构键路径数组

我有一个类似的对象:

我正在尝试存储一个异构的更新数组,以便以后可以使用它们来设置值。像这样的东西。

但是,这当然在 getUpdates() 中读取Cannot convert value of type 'WritableKeyPath<MyObject, String?>' to expected argument type 'WritableKeyPath<MyObject, Any>'.

需要有一组异构的可写键路径,然后我可以使用它们来设置值。鉴于泛型通常如何工作,我不明白为什么 String 不能等同于 Any 泛型,因为该类型是向下转换的。