12

Ich habe ein Objective-C-Protokoll, das ich in einer Swift-Klasse implementieren möchte. Zum Beispiel:Typ "SwiftClass" kann nicht dem Protokoll "ObjcProtocol" entsprechen, da es Anforderungen erfüllt, die nicht erfüllt werden können

@class AnObjcClass; 

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

Wenn ich versuche, um es in einer Swift Klasse wie folgt anzupassen:

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

ich folgende beängstigend Compiler-Fehler:

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

Wie behebe ich Dies?

Antwort

21

Stellen Sie sicher, dass alle von diesem Protokoll referenzierten Klassen in Ihrem Bridging-Header enthalten sind.

Dieser Fehler tritt auf, wenn einer der im Protokoll verwendeten Typen (das Protokoll selbst, ein Rückgabetyp, ein Argumenttyp) nicht in Ihrem Swift-Bridging-Header enthalten ist.

Objective-C-Klassen können dieses Protokoll aufgrund der Forward-Deklaration @class AnObjcClass glücklich implementieren, aber es scheint, dass Swift-Klassen keine Protokolle implementieren können, die Klassen verwenden, die nur nach vorne deklariert sind.