如何设置SFSpeechRecognitionTask的委托?

时间:2017-01-19 15:26:05

标签: ios objective-c delegates swift3 speech-recognition

在大多数情况下,设置委托就像在类中实现委托协议一样简单,并将该类的实例声明为您正在使用的任何实例的委托。

我实际上对SFSpeechRecognizer使用了同样的基本概念,它在我的代码中属于同一个语音框架。 (伪代码示例):

class myViewControllerClass: SFSpeechRecognizerDelegate{

let mySpeechRecognizer = SFSpeechRecognizer(...)

viewDidLoad(){
mySpeechRecognizer.delegate = self
}
...

//SFSpeechRecognizerDelegate Functions here
...

}  
//This works as expected, woo!

但是,似乎SFSpeechRecognitionTask没有可以设置的委托属性。我尝试在我的课程中实现'SFSpeechRecognitionTaskDelegate'协议,希望它能够神奇地工作。但是,似乎从未调用过委托函数。哪种有意义,因为它无法知道我的视图控制器应该是委托,为什么会这样呢?

Apple文档涵盖了协议本身以及如何使用它:

https://developer.apple.com/reference/speech/sfspeechrecognitiontaskdelegate

但是任务本身的文档没有标识任何委托属性:

https://developer.apple.com/reference/speech/sfspeechrecognitiontask

此处还可以参考SFSpeechRecognizer文档,该文档具有协议,并按照您的预期识别委托属性:

https://developer.apple.com/reference/speech/sfspeechrecognizer

是否有一些替代方法我应该为SFSpeechRecognitionTask设置委托?还是以完全不同的方式处理?

2 个答案:

答案 0 :(得分:6)

在SFSpeechRecognizer中有一个方法

func recognitionTask(with request: SFSpeechRecognitionRequest, 
        delegate: SFSpeechRecognitionTaskDelegate) -> SFSpeechRecognizerTask

您可以传递SFSpeechRecognizerTask的委托。

答案 1 :(得分:1)

我在ViewController中这样做了:

recognitionTask = speechRecognizer?.recognitionTask(with: speechRecognitionRequest, delegate: self)
相关问题