在大多数情况下,设置委托只需要在类中实现委托协议,并将该类的实例声明为您正在使用的实例的委托即可。
我实际上在我的代码中针对同一语音框架中属于SFSpeechRecognizer的对象使用了这个基本概念。(伪代码示例):
然而,似乎SFSpeechRecognitionTask没有可设置的委托属性。我尝试在我的类中实现“SFSpeechRecognitionTaskDelegate”协议,希望它会神奇地起作用。但是,委托函数似乎从未被调用过。这有点说得通,因为它不知道我的视图控制器应该是委托,所以它为什么会呢!?苹果文档涵盖了协议本身以及如何使用它:
我实际上在我的代码中针对同一语音框架中属于SFSpeechRecognizer的对象使用了这个基本概念。(伪代码示例):
class myViewControllerClass: SFSpeechRecognizerDelegate{
let mySpeechRecognizer = SFSpeechRecognizer(...)
viewDidLoad(){
mySpeechRecognizer.delegate = self
}
...
//SFSpeechRecognizerDelegate Functions here
...
}
//This works as expected, woo!
然而,似乎SFSpeechRecognitionTask没有可设置的委托属性。我尝试在我的类中实现“SFSpeechRecognitionTaskDelegate”协议,希望它会神奇地起作用。但是,委托函数似乎从未被调用过。这有点说得通,因为它不知道我的视图控制器应该是委托,所以它为什么会呢!?苹果文档涵盖了协议本身以及如何使用它:
https://developer.apple.com/reference/speech/sfspeechrecognitiontaskdelegate
但是任务本身的文档没有标识出任何委托属性:
https://developer.apple.com/reference/speech/sfspeechrecognitiontask
此外,以下是SFSpeechRecognizer文档,其中包含协议并且像您预期的那样标识了委托属性:
https://developer.apple.com/reference/speech/sfspeechrecognizer
我是否应该使用其他替代方法来设置SFSpeechRecognitionTask的代理?或者它是以完全不同的方式处理的?
func recognitionTask(with: SFSpeechRecognitionRequest, resultHandler: @escaping (SFSpeechRecognitionResult?, Error?) -> Void)
并使用结果处理程序函数来处理语音处理。如果我想同时拥有结果处理程序和定义委托,我该怎么办?难道我必须拥有我的蛋糕,但却被迫盯着它发呆而不能吃它吗?! - Bebheadoptional func speechRecognitionTask(_ task: SFSpeechRecognitionTask, didFinishRecognition recognitionResult: SFSpeechRecognitionResult)
,我认为它与处理程序做的事情相同。 - TheAmateurProgrammer