objective-c swift struct

objective c - cómo pasar un Swift Struct como parámetro a un método Objective-C



(2)

Tengo un objetivo c que acepta un parámetro "id" y quiero pasarlo a Swift Struct.

// archivo: ObjcClass.m

@implementation ObjcClass + (void)addListener:(id)listener { //... do something with listener } //file DemoStruct.swift Struct DemoStruct { func registerAsListener() { ObjcClass.addListener(self) //Cant find a way to do this } }

El mensaje de error de compilación que recibo:

Tipo ''DemoStruct'' no se ajusta al protocolo ''AnyObject''

Entonces mi pregunta sería, ¿cómo puedo hacer que un método Object -C acepte '' Any '' en lugar de '' AnyObject '' y existe tal cosa?


No puedes hacerlo

Swift structs no son accesibles desde Objective-C. Esto se afirma en el libro "Using Swift With Cocoa and Objective-C" de Apple:

Tendrás acceso a cualquier cosa dentro de una clase o protocolo que esté marcado con el atributo @objc, siempre que sea compatible con Objective-C. Esto excluye las características exclusivas de Swift como las que se enumeran a continuación:

  • Genéricos
  • Tuples
  • Enumeraciones definidas en Swift
  • Estructuras definidas en Swift
  • Funciones de nivel superior definidas en Swift
  • Variables globales definidas en Swift
  • Tipealias definidas en Swift
  • Variadics de estilo Swift
  • Tipos anidados
  • Funciones al curry

Extracto de: Apple Inc. "Uso de Swift con Cocoa y Objective-C." IBooks. https://itun.es/gb/1u3-0.l


Lo mejor que encontré fue envolver en una clase Box

public class Box<T> { let unbox: T init(_ value: T) { self.unbox = value } }