Тип "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 не могут реализовывать протоколы, которые используют классы, которые только объявлены вперед.