Pregunta ¿Es posible obtener la cadena KVC desde Swift 4 KeyPath?


Para un proyecto en el que estoy trabajando actualmente, sería muy útil obtener el KVC-String desde una instancia de KeyPath que mi método está recibiendo. Ejemplo corto:

struct Person {
    var name: String
}

let propertyCache = ["name": "something"]

func method<T>(_ keypath: KeyPath<Person, T>) -> T? {
    let kvcName = keypath.kvc
    return propertyCache[kvcName]
}

Esto puede parecer poco útil, pero en mi proyecto es :) Encontré una propiedad en KeyPath llamada _kvcKeyPathString que también es público, pero regresa nil Cada vez que lo intenté. ¿O es tal vez su posibilidad de usar la reflexión allí? Gracias de antemano por ideas / soluciones!


5
2017-09-10 17:02


origen


Respuestas:


Todavía no conozco una forma Swift pura para obtener el nombre de la propiedad como una cadena.

Pero, si agrega el @objc atribuir a la propiedad entonces _kvcKeyPathString realmente tendrá un valor en lugar de ser siempre nulo. Además, como las estructuras Swift no se pueden representar en Objective-C, este método solo funciona para las clases.

Un uso de ejemplo de trabajo mínimo:

class SomeClass {
    @objc var someProperty = 5
}

let keyPath = \SomeClass.someProperty
print(keyPath._kvcKeyPathString)

7
2017-09-11 06:57



Preguntas populares