2017-08-29 109 views
0

我已經在迅速上創建類和類和它的協議。我正在使用的OBJ-C啓用的項目,但我得到以下錯誤,而編譯我的項目。找不到斯威夫特協議聲明中的OBJ-C級

找不到'SpeechRecognizerDelegate'的協議聲明; 你的意思是'SFSpeechRecognizerDelegate'?

任何人都可以指導我如何在我的Obj-C類中使用Swift類協議。

這裏是我的銀行代碼:在的OBJ-C

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


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

} 

協議使用:

#import "ARBot-Swift.h" 

@interface ChatScreenViewController : JSQMessagesViewController <SpeechRecognizerDelegate> 

讓我知道,如果需要更多的信息。

在此先感謝。

回答

1

定義您斯威夫特協議這樣

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

對於協議的使用,我們需要增加內部目標C文件協議 -

#import "ARBot-Swift.h" 

@interface ChatScreenViewController : JSQMessagesViewController <SpeechRecognizerDelegate> 

然後,你需要確認協議方法 -

- (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

你的意思是通過添加協議裏面?我正在做與確認協議相同,但得到編譯器錯誤。 – CodeChanger

+0

您需要爲協議確認添加協議方法。你做過了嗎? @CodeChanger –

+0

是的,我已經做了這個,但仍然是相同的錯誤。 – CodeChanger

1

添加@objc屬性的協議:

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

不工作我都試過,但同樣的警告。 – CodeChanger

0

我以下(進口頭+協議上標註Objc)之後也有類似的問題。從Objective C頭文件中使用Swift代碼時,我得到了警告。只通過導入到實現.m文件解決。