Question Le type "SwiftClass" ne peut pas être conforme au protocole "ObjcProtocol" car il a des exigences qui ne peuvent pas être satisfaites


J'ai un protocole Objective-C que j'essaie d'implémenter dans une classe Swift. Par exemple:

@class AnObjcClass;

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

Quand j'essaye de me conformer à cela dans une classe Swift comme celle-ci:

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

J'ai l'erreur suivante du compilateur:

Le type "SwiftClass" ne peut pas être conforme au protocole "ObjcProtocol" car il a des exigences qui ne peuvent pas être satisfaites.

Comment résoudre ça?


13
2017-10-02 20:37


origine


Réponses:


Assurez-vous que toutes les classes référencées par ce protocole sont incluses dans votre en-tête de pontage.

Cette erreur se produit lorsque l'un des types utilisés dans le protocole (le protocole lui-même, un type de retour, un type d'argument) n'est pas inclus dans votre en-tête de pontage Swift.

Les classes Objective-C peuvent implémenter ce protocole à cause de la @class AnObjcClass déclaration forward, mais il semble que les classes Swift ne peuvent pas implémenter les protocoles qui utilisent des classes qui ne sont déclarées que vers l'avant.


22
2017-10-02 20:37