在大多数情况下,设置委托就像在类中实现委托协议一样简单,并将该类的实例声明为您正在使用的任何实例的委托。
我实际上对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设置委托?还是以完全不同的方式处理?
答案 0 :(得分:6)
在SFSpeechRecognizer中有一个方法
func recognitionTask(with request: SFSpeechRecognitionRequest,
delegate: SFSpeechRecognitionTaskDelegate) -> SFSpeechRecognizerTask
您可以传递SFSpeechRecognizerTask的委托。
答案 1 :(得分:1)
我在ViewController
中这样做了:
recognitionTask = speechRecognizer?.recognitionTask(with: speechRecognitionRequest, delegate: self)