Как правильно использовать Swift протокол в Objective C?
У меня есть либа которая написана на Swift и я ее использую в проекте App как в Swift файлах так и в Objective-C (библиотека подключена правильно включая *-Swift.h файл)
В либе такая структура
Factory
import Foundation
@objc public class Factory : NSObject{
@objc public func create() -> ModelProtocol
{
return FirstModel()
}
}
Model protocol
import Foundation
@objc public protocol ModelProtocol
{
func foo()
}
First Model
import Foundation
public class FirstModel : NSObject, ModelProtocol
{
public func foo() {
//Do some things here
}
}
Когда я использую эту Factory в Swift то нет проблем он видит протокол и имплементации, в то время как в Objective-c он видит класс, но когда я пробую обратиться к протоколу получаю вот такую ошибку
Use of undeclared identifier 'ModelProtocol'
#import <Foundation/Foundation.h>
#import "Lib-Swift.h"
@implementation ViewController : NSObject
- (void)foo {
Factory *factory = [Factory new];
ModelProtocol *protocol = [factory create];
}
@end
Так же загрузил проект и либу на драйв https://drive.google.com/drive/folders/1-DMYMhTqTqpgHcp31DNVby7US46OXUYM?usp=sharing
Что делаю не так?
Ответы (1 шт):
Протокол в Objective-C не является типом, поэтому его нельзя использовать как переменную. Правильно будет так
id<ModelProtocol> protocol = [factory create];