Swift 4 "Esta class no cumple con la encoding de valores key"

Tengo una biblioteca Swift que depende en gran medida de obj.valueForKey() de NSObject .

Después de migrar a Swift 4, he descubierto que estas llamadas siempre fallan con el error "esta class no cumple con la encoding de valores key para la key …" a less que la propiedad que estoy buscando esté declarada con @objc .

¿Ahora es obligatorio declarar properties con @objc para que se encuentren con este método? ¿Hay alguna alternativa?

Cuando realizó la migration, Xcode preguntó acerca de la inferencia @objc y probablemente seleccionó el nuevo tipo en lugar de Swift3.

Soluciones posibles:

Use @objcMembers

Podrías usar @objcMembers en la class.

La aplicación del atributo @objcMembers a una class implícitamente agrega el atributo @objc a todos sus miembros compatibles con Objective-C.

Escritura de classs Swift y protocolos con comportamiento Objective-C

Usa @objc

Use @objc en cada método, según sea necesario en lugar de en toda la class.

Cambiar la inferencia al comportamiento anterior

También puede cambiar el comportamiento del proyecto en: Build Settings > Swift 3 @objc Inference > On / Off

Preguntas relacionadas:

  • ¿El uso de la inferencia Swift 3 @objc en el modo Swift 4 está en desuso?
  • ¿Cómo puedo hacer frente a la desaprobación inferencia @objc con #selector () en Swift 4?