- ¿Qué es la @objcinferencia? Que esta pasando?
En Swift 3, el compilador deduce @objcen varios lugares para que no tenga que hacerlo. En otras palabras, ¡se asegura de agregar @objcpara usted!
En Swift 4, el compilador ya no hace esto (tanto). Ahora debe agregar @objcexplí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_INFERENCEconfiguració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 @objcen cada función o variable que deba exponerse al tiempo de ejecución de Objective-C:
@objc func foo() {
}
El otro es usarlo @objcMembersmediante una Classdeclaración. Esto se asegura de agregar automáticamente @objca 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 @objcy por qué es necesario?
Si introduce nuevos métodos o variables en una clase Swift, marcándolos como @objcexpuestos 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: