J'ai un projet Objective-C dans lequel j'utilise des scripts Swift parmi les scripts Obj-C.
Dans l'un des scripts Swift, j'ai une classe:
#import <AVFoundation/AVFoundation.h>. <â I added this to make sure that AVFoundation is present in the header file SWIFT_CLASS("_TtC17FLIROneSDKExample12VideoCapture") @interface VideoCapture : NSObject <AVCaptureVideoDataOutputSampleBufferDelegate> <<ââ!!! error: No type or protocol named 'AVCaptureVideoDataOutputSampleBufferDelegate' - (void)captureOutput:(AVCaptureOutput * _Nonnull)output didOutputSampleBuffer:(CMSampleBufferRef _Nonnull)sampleBuffer fromConnection:(AVCaptureConnection * _Nonnull)connection; - (void)captureOutput:(AVCaptureOutput * _Nonnull)output didDropSampleBuffer:(CMSampleBufferRef _Nonnull)sampleBuffer fromConnection:(AVCaptureConnection * _Nonnull)connection; - (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER; @end
Comme il s'agit d'un projet Obj-C, je l'ai ajouté au début de @obj, afin qu'ils apparaissent dans mon ($ project_name-Swift.h) fichier d'en-tête.
J'obtiens l'erreur pour ce qui est écrit dans mon fichier d'en-tête:
// extrait du fichier d'en-tête: project_name-Swift.h
@objc public class VideoCapture: NSObject, AVCaptureVideoDataOutputSampleBufferDelegate { ~~bunch of functions~~ }
Je ne comprends pas ce qui en est la cause, et je suppose que cela a à voir avec l'impossibilité d'accéder correctement à la bibliothèque AVFoundation à partir du fichier d'en-tête ou quelque chose.
Des idées pour résoudre ce problème?
3 Réponses :
Vous devrez probablement ajouter le @protocol
pour AVCaptureVideoDataOutputSampleBufferDelegate
.
@protocol AVCaptureVideoDataOutputSampleBufferDelegate;
Mettez cela juste au-dessus de @interface code> dans votre fichier
project_name-Swift.h
.
L'ajout de cela ne résout pas le problème et ne modifie malheureusement pas le code d'erreur. Vous vouliez simplement ajouter cette ligne dans le fichier d'en-tête? Ou aussi ajouter un protocole dans mon fichier .swift? Est-il également possible de modifier ce fichier -Swift.h? Il semble que xcode annule mes modifications à chaque fois que je nettoie avec Cmd + shift + k
Essayez de l'ajouter à votre fichier Swift
; concernant les changements d'annulation - aucune idée.
Je ne sais pas comment faire cela correctement. Ce n'est pas correct, n'est-ce pas? : @objc protocole public AVCaptureVideoDataOutputSampleBufferDelegate {}
Essayez d'utiliser @objcMembers en plus de votre classe importée rapidement, cela vous assurera d'avoir accès à tout le code objective-c.
Merci! l'a ajouté à ma classe, comme @objcMembers public class VideoCapture: NSObject, AVCaptureVideoDataOutputSampleBufferDelegate {
Mais cela ne fonctionne toujours pas. J'obtiens dans mon fichier d'en-tête -swift: @interface VideoCapture: NSObject
Essayez de remplacer ce délégué par d'autres qui compilent correctement et recherchent les différences. Si le problème n'est pas résolu, veuillez partager l'en-tête du fichier h de ce délégué problématique.
J'ai essayé la même chose avec AVCapturePhotoCaptureDelegate et j'obtiens la même erreur. De plus, lors de l'ajout de @objcMembers, j'obtiens également des erreurs de type attendues sur des parties du code. Cela se produit dans le fichier inclus dans mon fichier .m où j'importe le fichier -Swift.h. Voulez-vous partager mon propre fichier -Swift.h?
J'ai eu le même problème. L'ajout de @objc
ou @protocol
n'aide pas. Je le résolve en ajoutant
#import <AVFoundation/AVFoundation.h>
au fichier PrefixHeader.pch
juste avant #import
. p>
J'espère que cela aide quelqu'un.
Ouais, ça m'a vraiment aidé. Merci :)