0

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

struct Person {
  var kids: [KidId: KidName] = [:]
}

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

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

4

1 回答 1

1

您的问题不清楚,因为您User在文本中提到了,但Person在您的代码中有。这表明您的语法可能正确,但层次结构错误。

您也可能只是忘记了问号。

要获得您要询问的类型,您还需要一个KidIDD 在 Swift 中大写)值,而不是KidID类型。

typealias KidID = String
enum KidName { case goatBoy }
\Person.kids[""] as WritableKeyPath<Person, KidName?>
Person(kids: ["": .goatBoy])[keyPath: \.kids[""]] // .goatBoy

您不必在键路径中提供值,但这是一种不同的类型。

\Person.kids as WritableKeyPath<Person, [KidID: KidName]>
Person(kids: ["": .goatBoy])[keyPath: \.kids][""] // .goatBoy
于 2021-12-08T23:32:12.387 回答