objective-c - microsoft - visual studio installer
¿Puede el código del objetivo-c llamar a la extensión rápida en Clase? (5)
Busqué algunas publicaciones, creo que no puedo escribir una extensión bajo swift, y llamarlo desde el código Objective-C, ¿verdad?
@objc como los atributos solo admiten métodos, clases, protocolos?
Como se cubre 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 puenteado (es decir, la extensión se define en
String
y no en
NSString
).
Estas categorías no se vincularán automáticamente a 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 con
as String
) o definir una extensión para los tipos Swift y Objective-C.
Descubrí que en
Swift 4.0
tenía que agregar
@objc
delante 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 configuración de archivo:
CustomClass.h
CustomClass.m
CustomClassExtension.swift
En CustomClassExtension:
@objc extension CustomClass
{
func method1()
{
...
}
}
En mi AppDelegate.m:
self.customClass = [[CustomClass alloc] init];
[self.customClass method1];
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.
import UIKit
extension UIColor {
//Custom colours
class func otherEventColor() -> UIColor {
return UIColor(red:0.525, green:0.49, blue:0.929, alpha:1)
}
}
Luego # importe "ProductModuleName-Swift.h" en su archivo ObjC.
Swift 4
extension UIColor {
// As of Swift 4.0.3, the @objc annotation is needed if you want to use the extension in Objective-C files
@objc
class func otherEventColor() -> UIColor {
return UIColor(red:0.525, green:0.49, blue:0.929, alpha:1)
}
}
Importe el encabezado "#import" ProductModuleName-Swift.h " en el archivo object -c y agregue @objc delante de su extensión en el archivo swift. Funcionará bien en swift 4.2 y swift 5
Puede escribir una extensión Swift y usarla en el código ObjectiveC. Probado con XCode 6.1.1.
Todo lo que necesitas hacer es:
-
cree su extensión en Swift (sin anotación @objc)
-
importe "ProjectTarget-Swift.h" en su clase ObjectiveC (donde "ProjectTarget" representa el objetivo XCode al que está asociada la extensión Swift)
-
llamar a los métodos desde la extensión Swift