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

swift - 将可选类型转换为非可选类型

以下代码引发编译错误:

这是因为type(of: obj[keyPath: \MyObj.nestedObj]),NestedObject?当然不能初始化。我需要一种方法来解开可选类型并获得非可选类型NestedObject

必须维持的假设。

  • 我必须使用可选项,因为有可能nestedObj为零。
  • 我不知道是什么类型NestedObject。它可以是任何类型,但我确信这些类型都是Initable.
  • 我需要能够nestedObject通过 keypath 设置我的属性。
  • 如果nestedObject是 nil,我需要创建一个新NestedObject的并通过 keypath 设置值。

这是较大系统的一小部分,因此必须考虑上述假设。我无法改变那些。

0 投票
0 回答
59 浏览

swift - 使用泛型将 PartialKeyPath 向下转换为 ReferenceWriteableKeyPath?

我想要一个简单的序列化实现,它存储一个类的各种 KeyPath 的值并应用它们。我知道这可以通过手动存储变量来实现,但我更喜欢使用 KeyPaths,因为添加额外的路径会更容易。请参见下面的示例:

如果我在 applyValue() 中添加断点,keyPath 将显示为预期的 ReferenceWriteableKeyPath。同样,如果我尝试通过显式声明预期值类型(例如ReferenceWriteableKeyPath<Model, Int>or ReferenceWriteableKeyPath<Model, Bool>)来对 KeyPath 进行类型转换,则类型转换工作正常。但是,编写的代码永远不会进入条件。有没有人看到代码的问题或知道如何使这种通用的向下转换工作?

0 投票
1 回答
57 浏览

swift - Swift - 改变枚举关联类型属性的值

我有 2 个符合一个协议的结构。我创建了带有关联类型的枚举作为结构类型。当我尝试使用动态成员查找访问协议类型 A 的属性时,getter 工作正常。但是 Set 方法抛出错误:根类型为“A”的密钥路径不能应用于类型为“A1”/“A2”的基础

有时我也会收到此错误:无法通过下标分配:'a' is immutable

任何想法都会有所帮助

0 投票
1 回答
72 浏览

swift - Swift:.contains(where:) 使用键路径表达式

有没有办法使用键路径表达式来简化 Swift 中的样板代码contains(where:)?

例如

上面的例子是否可以在 Swift 中表达,使用\.boolon struct Struct,而不诉诸于structs.filter(\.bool).count > 0

0 投票
0 回答
86 浏览

swift - 通过 KeyPath / WritableKeyPath 快速初始化

有没有办法通过 Key Path 设置属性来初始化 Swift 类型?

尝试通过密钥路径初始化失败并出现以下错误:

'self' 在所有存储属性初始化之前使用
从初始化程序返回而不初始化所有存储属性

如果该属性使用let而不是var,则会给出错误:

无法通过下标赋值:关键路径是只读的

通过键路径设置属性init似乎不起作用。为什么不?有什么解决方法吗?

这个问题是否在开源 Swift Evolution 过程中被讨论或提出过?

0 投票
0 回答
24 浏览

swift - Swift - 从属性访问器推断 KeyPath

有没有办法在其访问器中推断属性的 KeyPath?

我有以下设置:

我正在使用KeyPath而不是String这样我就不会出现拼写错误。

如何\.value从 的访问器中推断出YourOtherClass.value

0 投票
1 回答
65 浏览

swift - 如何编写 KeyPath 来引用字典的值

假设我有一个这样的结构:

是否可以构造一个键路径来引用属性中某些东西的User.kids?像\User.kids[KidId]什么?

具体来说,我想构建一个WritableKeyPath<User,KidName>. 我以为您可以通过键路径进入字典和数组,但我终其一生都无法在互联网上的任何地方找到语法。也许这是不可能的?

0 投票
1 回答
99 浏览

ios - 键路径值类型“Int”无法转换为上下文类型“String”

我正在尝试将包含 KeyPath 和排序顺序类型的多个元组传递给应该进行排序的方法。

我有这个方法:

我正在这样使用它:

现在,因为pageViewssessionDuration属性都是integers,这将起作用。

但是如果我想传递两个不同类型的属性(比如StringInt),我会收到这个错误:

这是其余的代码,但我想不是那么相关:

我应该如何定义排序方法以便它接受异构键路径?

0 投票
0 回答
51 浏览

swift - 在 Swift 中获取 Codable 值的编码值

我正在开发一个以 JSON 格式存储可编码类型的 Swift 服务。该类型还定义了一个嵌套CodingKeys枚举,以在编码为 JSON 时定义属性名称。例如,我可能有一个看起来像这样的类型:

现在我有一个函数想要对这些属性之一进行操作,由该属性的键路径指定。使用示例中的类型,我想要一个可以这样调用的函数:

我的函数是使用以下KeyPath类型声明的:

为了实现我的功能,我想以某种方式不仅可以访问名为 的密钥路径参数usingProperty,还可以访问与其关联的编码密钥。因此,当使用属性的键路径调用时myIntProperty,我想获取编码时使用的名称,即int_property.

有没有办法从KeyPath参数及其根类型的CodingKeys枚举中得出这个值?