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: