12

Mam protokół Objective-C, który próbuję implementować w klasie Swift. Na przykład:Typ "SwiftClass" nie może być zgodny z protokołem "ObjcProtocol", ponieważ ma wymagania, których nie można spełnić.

@class AnObjcClass; 

@protocol ObjcProtocol <NSObject> 
    - (void)somethingWithAnArgument:(AnObjcClass *)arg; 
@end 

Kiedy próbuję z nim zgodne w Swift klasy jak ten:

@objc class SwiftClass: NSObject, ObjcProtocol { 
    // ... 
} 

otrzymuję następujący straszny błąd kompilatora:

Type "SwiftClass" cannot conform to protocol "ObjcProtocol" because it has requirements that cannot be satisfied.

Jak rozwiązać to?

Odpowiedz

21

Upewnij się, że wszystkie klasy, do których odwołuje się ten protokół, znajdują się w nagłówku pomostowym.

Ten błąd występuje, gdy jeden z typów używanych w protokole (sam protokół, typ zwracany, typ argumentu) nie jest zawarty w nagłówku mostkowania Swift.

Klasy Objective-C mogą z powodzeniem zaimplementować ten protokół ze względu na deklarację forward z @class AnObjcClass, ale wydaje się, że klasy Swift nie mogą implementować protokołów, które używają klas, które są zadeklarowane tylko do przodu.

Powiązane problemy