Тип "SwiftClass" не может соответствовать протоколу "ObjcProtocol", поскольку он имеет требования, которые не могут быть удовлетворены
У меня есть протокол Objective-C, который я пытаюсь реализовать в классе Swift. Например:
@class AnObjcClass;
@protocol ObjcProtocol <NSObject>
- (void)somethingWithAnArgument:(AnObjcClass *)arg;
@end
Когда я пытаюсь соответствовать этому классу Swift следующим образом:
@objc class SwiftClass: NSObject, ObjcProtocol {
// ...
}
Я получаю следующую ужасную ошибку компилятора:
Тип "SwiftClass" не может соответствовать протоколу "ObjcProtocol", потому что он имеет требования, которые не могут быть удовлетворены.
Как это разрешить?
Ответы
Ответ 1
Убедитесь, что все классы, на которые ссылается этот протокол, включены в ваш заголовок моста.
Эта ошибка возникает, когда один из типов, используемых в протоколе (сам протокол, тип возврата, тип аргумента), не включен в ваш заголовок моста Swift.
Классы Objective-C могут с радостью реализовать этот протокол из-за форвардного объявления @class AnObjcClass
, но, похоже, что классы Swift не могут реализовывать протоколы, которые используют классы, которые только объявлены вперед.