#swift #objective-c
Вопрос:
Я новичок в iOS. У меня есть библиотека, которую я использую в своем приложении как в файлах Swift, так и в файлах Objc (я правильно подключил свою библиотеку, включая файл *-Swift.h).
Итак, моя библиотека имеет такую структуру
Фабрика
import Foundation
@objc public class Factory : NSObject{
@objc public func create() -> ModelProtocol
{
return FirstModel()
}
}
Типовой протокол
import Foundation
@objc public protocol ModelProtocol
{
func foo()
}
Первая Модель
import Foundation
public class FirstModel : NSObject, ModelProtocol
{
public func foo() {
//Do some things here
}
}
когда я пытаюсь использовать эту фабрику на стороне Swift, все работает правильно
import Foundation
import Lib
class TestClass {
public init(){}
func boo()
{
let factory = Factory()
let _: ModelProtocol = factory.create()
}
}
но когда я пытаюсь сделать то же самое на стороне Objc, я получаю ошибку
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];