Busqué algunas publicaciones, creo que no puedo escribir una extensión en Swift y llamarla desde el código Objective-C, ¿verdad?
¿Los atributos similares a @objc solo admiten métodos, clases, protocolos?
objective-c
swift
swift-extensions
sprhawk
fuente
fuente

Respuestas:
Puede escribir una extensión Swift y usarla en el código Objective-C. Probado con XCode 6.1.1.
Todo lo que necesitas hacer es:
crea tu extensión en Swift (sin
@objcanotaciones)#import "ProjectTarget-Swift.h"en su clase Objective-C (donde "ProjectTarget" representa el destino XCode con el que está asociada la extensión Swift)llamar a los métodos desde la extensión Swift
Actualización: a partir de @Rizwan Ahmed mencionado, debe agregar una
@objcanotación:fuente
Descubrí que en Swift 4.0 tenía que agregar
@objcdelante de mi palabra clave de extensión para que los métodos de extensión Swift fueran visibles por una instancia de la clase Objc que estaba extendiendo.En breve:
Configuración de archivo de configuración:
En CustomClassExtension:
En mi AppDelegate.m:
fuente
@nonobjcanotación.Esta solución funciona para Swift 2.2 y Swift 3 . Tenga en cuenta que solo las extensiones para clases (no para estructuras o enumeraciones) serán accesibles desde Objective-C.
Luego, #importe "ProductModuleName-Swift.h" en su archivo ObjC.
Rápido 4
fuente
publices necesario? Funciona bien sinpublicmodificador para mí. ¿Estamos asumiendo que la extensión no está en el mismo proyecto sino que se está importando de otro proyecto?Como se explica en las otras respuestas, la importación del encabezado Swift generado funciona en la mayoría de los casos .
Una excepción a esto es cuando la categoría se define en un tipo puente (es decir, la extensión se define en
Stringy noNSString). Estas categorías no se vincularán automáticamente con sus contrapartes de Objective-C. Para evitar esto, deberá usar el tipo Objective-C (y emitir el valor de retorno en su código Swift conas String) o definir una extensión para los tipos Swift y Objective-C.fuente
public extension NSString. Si obtiene un identificador no resuelto o un error similar en el momento de la compilación, puede volver alet sVal = self as StringsValmclaughlinjdijo, tanto para la clase NSString como para la estructura StringImporte el encabezado "#import" ProductModuleName-Swift.h " en el archivo objetivo-c y agregue @objc delante de su extensión en un archivo rápido. Funcionará bien en swift 4.2 y swift 5
fuente