假设我有一个这样的结构:
struct Person {
var kids: [KidId: KidName] = [:]
}
是否可以构造一个键路径来引用属性中某些东西的值User.kids
?像\User.kids[KidId]
什么?
具体来说,我想构建一个WritableKeyPath<User,KidName>
. 我以为您可以通过键路径进入字典和数组,但我终其一生都无法在互联网上的任何地方找到语法。也许这是不可能的?
假设我有一个这样的结构:
struct Person {
var kids: [KidId: KidName] = [:]
}
是否可以构造一个键路径来引用属性中某些东西的值User.kids
?像\User.kids[KidId]
什么?
具体来说,我想构建一个WritableKeyPath<User,KidName>
. 我以为您可以通过键路径进入字典和数组,但我终其一生都无法在互联网上的任何地方找到语法。也许这是不可能的?
您的问题不清楚,因为您User
在文本中提到了,但Person
在您的代码中有。这表明您的语法可能正确,但层次结构错误。
您也可能只是忘记了问号。
要获得您要询问的类型,您还需要一个KidID
(D 在 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