the programming language examples book apple ios swift xcode swift4

ios - programming - swift examples



Swift 4 "Esta clase no es compatible con la codificación de valores clave" (1)

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

Después de migrar a Swift 4, descubrí que estas llamadas siempre se bloquean con el error "esta clase no es compatible con la codificación del valor de clave para la clave ..." a menos que la propiedad que estoy buscando se declare con @objc .

¿Es obligatorio ahora declarar propiedades con @objc para que se encuentren con este método? ¿Hay una alternativa?


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

Soluciones posibles:

Usa @objc

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

Use @objcMembers

Podrías usar @objcMembers en la clase.

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

Escribir clases rápidas y protocolos con comportamiento Objective-C

Recuerde: debido a que la aplicación del atributo @objc puede aumentar el tamaño compilado de una aplicación y afectar negativamente el rendimiento, solo aplique el atributo @objcMembers en las declaraciones cuando cada miembro necesite que se aplique el atributo @objc .

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: