Я пытаюсь реализовать шаблон посредника со смесью Swift и Obj-C. Проблема, с которой я столкнулся, заключается в том, как бороться с использованием классов реализации протокола Swift от Obj-C. Проверьте код, чтобы увидеть, что я имею в виду:Использование реализации Swift-протокола в Obj-C
Свифта протокол и ее осуществлении:
@objc public protocol TheProtocol {
func someMethod()
}
@objc public class SwiftClass: NSObject, TheProtocol {
public func someMethod() {
print("someMethod Swift")
}
}
В ObjC-реализацию протокола:
#import "SwiftAndObjC-Swift.h"
@interface ObjCClass : NSObject <TheProtocol>
- (void) someMethod;
@end
@implementation ObjCClass
- (void) someMethod
{
NSLog(@"someMethod ObjC");
}
@end
Мой вопрос, как это его можно определить некоторый тип в ObjC, который способен ссылаться либо на SwiftClass, либо на ObjCClass. Например, это не компилируется:
#import "SwiftAndObjC-Swift.h"
...
TheProtocol *p = [[ObjCClass alloc] init];
// Error: "Use of undeclared identifier TheProtocol"
будет скомпилирован:
@class TheProtocol
TheProtocol *p = [[ObjCClass alloc] init];
Но не р не могут быть использованы:
@class TheProtocol
TheProtocol *p = [[ObjCClass alloc] init];
[p someMethod];
// Error: Receiver type "The Protocol" is a forward declaration"
(Добавление забросы к заданию и/или метод вызова не помогает)
Любые решения?
Приветствия, принято. – Gruntcakes