Как передать структуру Swift в качестве параметра методу Objective-C
у меня есть метод Objective-C, который принимает параметр типа id
и я хочу передать ему быструю структуру.
:
@implementation ObjcClass
+ (void)addListener:(id)listener {
// Do something with listener
}
:
struct DemoStruct {
func registerAsListener() {
ObjcClass.addListener(self) // Can't find a way to do this
}
}
сообщение об ошибке компиляции, которое я получаю:
тип "DemoStruct" не соответствует протоколу "AnyObject"
поэтому мой вопрос будет, как сделать метод Objective-C accept Any
вместо AnyObject
а есть такая вещь?
2 ответов
вы не можете сделать это.
структуры Swift недоступны из Objective-C. Об этом говорится в книге "использование Swift с Cocoa и Objective-C" от Apple:
У вас будет доступ ко всему, что находится в классе или протоколе, помеченном атрибутом @objc, если он совместим с Objective-C. Это исключает только Swift-функции, такие как перечисленные здесь:
- дженериков
- ОК
- перечисления, определенные в Swift
- структуры, определенные в Swift
- функции верхнего уровня, определенные в Swift
- глобальные переменные, определенные в Swift
- Typealiases определенные в Swift
- Свифт-стиль в
- вложенные типы
- Каррированные функции
Выдержка Из: Apple Inc. "Использование Swift с какао и Objective-C." iBooks. https://itun.es/gb/1u3-0.l
лучшее, что я нашел, это обернуть в класс Box
public class Box<T> {
let unbox: T
init(_ value: T) {
self.unbox = value
} }