- ¿Qué es la @objc
inferencia? Que esta pasando?
En Swift 3
, el compilador deduce @objc
en varios lugares para que no tenga que hacerlo. En otras palabras, ¡se asegura de agregar @objc
para usted!
En Swift 4
, el compilador ya no hace esto (tanto). Ahora debe agregar @objc
explícitamente.
Por defecto, si tiene un proyecto anterior a Swift 4, recibirá advertencias al respecto. En un proyecto Swift 4, obtendrá errores de compilación. Esto se controla mediante la SWIFT_SWIFT3_OBJC_INFERENCE
configuración de compilación. En un proyecto anterior a Swift 4, esto se establece en On
. Recomendaría establecer esto en Default
(o Off
), que ahora es la opción predeterminada en un nuevo proyecto.
Tomará algún tiempo convertir todo, pero dado que es el valor predeterminado para Swift 4, vale la pena hacerlo.
- ¿Cómo detengo las advertencias / errores del compilador?
Hay dos formas de convertir su código para que el compilador no se queje.
Una es usar @objc
en cada función o variable que deba exponerse al tiempo de ejecución de Objective-C:
@objc func foo() {
}
El otro es usarlo @objcMembers
mediante una Class
declaración. Esto se asegura de agregar automáticamente @objc
a TODAS las funciones y variables en la clase. Esta es la manera fácil, pero tiene un costo, por ejemplo, puede aumentar el tamaño de su aplicación al exponer funciones que no necesitaban estar expuestas.
@objcMembers class Test {
}
- ¿Qué es @objc
y por qué es necesario?
Si introduce nuevos métodos o variables en una clase Swift, marcándolos como @objc
expuestos al tiempo de ejecución de Objective-C. Esto es necesario cuando tiene un código Objective-C que usa su clase Swift o, si está usando características de tipo Objective-C como Selectors
. Por ejemplo, el patrón de acción objetivo:
button.addTarget(self, action:#selector(didPressButton), for:.touchUpInside)
- ¿Por qué no marcaría todo @objc
?
Hay aspectos negativos que vienen con marcar algo como @objc
:
- Aumento del tamaño binario de la aplicación.
- Sin sobrecarga de funciones
Tenga en cuenta que este es un resumen de muy alto nivel y que es más complicado de lo que escribí. Recomendaría leer la propuesta real para obtener más información.
Fuentes: