2017-08-29 1 views
0

Ich habe auf Klasse in Swift erstellt und diese Klasse und sein Protokoll verwende ich in Obj-C aktiviert Projekt, aber ich bekomme unten Fehler beim Kompilieren meines Projekts.Swift-Protokoll-Deklaration in Obj-C-Klasse nicht gefunden

kann die Protokolldeklaration für 'SpeechRecognizerDelegate' nicht finden; hast du unter 'SFSpeechRecognizerDelegate' verstanden?

Kann mir jemand dabei helfen, wie ich Swift-Klasse-Protokoll in meiner Obj-C-Klasse verwenden kann.

Hier ist mein Swift Code:

protocol SpeechRecognizerDelegate : class { 
    func speechRecognitionFinished(_ transcription:String) 
    func speechRecognitionError(_ error:Error) 
} 


class SpeechRecognizer: NSObject, SFSpeechRecognizerDelegate { 
    open weak var delegate: SpeechRecognizerDelegate? 

} 

Protokoll Verwendung in Obj-C:

#import "ARBot-Swift.h" 

@interface ChatScreenViewController : JSQMessagesViewController <SpeechRecognizerDelegate> 

Lassen Sie mich wissen, wenn mehr Informationen erforderlich.

Vielen Dank im Voraus.

Antwort

1

Definieren Sie Ihre Swift Protokoll wie diese

@objc protocol SpeechRecognizerDelegate{ 
    func speechRecognitionFinished(_ transcription:String) 
    func speechRecognitionError(_ error:Error) 
} 

Für Protokoll zu verwenden, müssen wir Protokoll innerhalb Objective C Datei hinzufügen -

#import "ARBot-Swift.h" 

@interface ChatScreenViewController : JSQMessagesViewController <SpeechRecognizerDelegate> 

Dann brauchen Sie Protokoll Methoden zur Bestätigung -

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    SpeechRecognizer * speechRecognizer = [[SpeechRecognizer alloc] init]; 
    speechRecognizer.delegate = self; 
} 


#pragma mark - Delegate Methods 
-(void)speechRecognitionFinished:(NSString *) transcription{ 
    //Do something here 
} 

-(void)speechRecognitionError:(NSError *) error{ 
    //Do something here 
} 
+0

Was meinst du mit hinzufügen Protokoll innen? Ich mache das selbe mit dem confirm-Protokoll, bekomme aber einen Compilerfehler. – CodeChanger

+0

Sie müssen Protokollmethoden für die Protokollbestätigung hinzufügen. Hast du das gemacht? @CodeChanger –

+0

Ja das habe ich schon gemacht aber immer noch gleicher Fehler. – CodeChanger

1

hinzufügen @objc Attribut zu Ihrem Protokoll:

@objc protocol SpeechRecognizerDelegate : class { 
    //... 
} 
+0

Nicht funktioniert Ich habe das aber gleiche Warnung versucht. – CodeChanger

0

Ich hatte ein ähnliches Problem nach folgenden (Import-Header + ObjC Anmerkung auf Protokoll). Ich habe die Warnung erhalten, wenn Swift-Code aus Objective-C-Headern verwendet wurde. Gelöst, indem nur in die IM-Dateien der Implementierung importiert wurde.