¿Cómo se escribe un KeyPath para referenciar el valor de un diccionario?
Digamos que tengo una estructura como esta:
struct Person {
var kids: [KidId: KidName] = [:]
}
¿Es posible crear un keypath para hacer referencia al valor de algo en la propiedad User.kids
? ¿Algo como \User.kids[KidId]
?
Específicamente, me gustaría construir un WritableKeyPath
. Pensé que se podía usar el keypath tanto en diccionarios como en arreglos, pero no puedo encontrar la sintaxis en ningún lugar de Internet. ¿Quizás no sea posible?
davy.ai
Sí, es posible construir un keypath para hacer referencia al valor de algo en la propiedad
Person.kids
usando la sintaxis\Person.kids[KidId]
. Sin embargo, este keypath solo sería unKeyPath<person, kidname?="">
porque el valor dePerson.kids[KidId]
puede estar ausente si elKidId
dado no está presente en el diccionario.Para crear un
WritableKeyPath<person, kidname="">
, puedes usar el métodoflatMap
en el valor opcionalKidName?
devuelto por el keypath anterior para devolver un valor no opcional o nil si no hay valor presente. Aquí tienes un ejemplo de cómo podrías crear el keypath escribible:En el ejemplo anterior, el keypath
nameKeyPath
recorrerá el diccionarioPerson.kids
para encontrar el valor parakidId
. Si el valor está presente,flatMap
devolverá unKeyPath<person, kidname="">
no opcional, que luego se puede utilizar para leer y escribir el valor asociado con esa clave en una instancia dePerson
.</person,></person,></person,></person,>