首页 > 解决方案 > IOS/Objective-C/Swift/Speech:在声明 SFSpeech Recognizer 变量时指定 Locale

问题描述

我正在尝试将一些我正在学习的 Swift 翻译为语音项目的 Objective-C。

Swift 显然允许您在声明变量时指定 SpeechRecognizer 的语言环境,如下所示:

private let speechRecognizer = SFSpeechRecognizer(locale: Locale.init(identifier: "en-US"))

在Objective-C中可以做到这一点吗?现在我已经在接口中声明了一个变量:

SFSpeechRecognizer *speechRecognizer;

然后稍后设置语言环境:

speechRecognizer = [[SFSpeechRecognizer alloc] initWithLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en-US"]];

理想情况下,我想在声明的一开始就这样做,但我对 Swift 和 Objective-C 真正做的事情之间的区别很模糊。

感谢您的任何建议或见解。

标签: iosobjective-csfspeechrecognizer

解决方案


想想 Swift 调用的结构是这样的:

// Create a Locale object for US English
let locale = Locale.init(identifier: "en-US")
// Create a speech recognizer object for US English
let speechRecognizer = SFSpeechRecognizer(locale: locale)

然后将 Swift 代码与 Objective-C 进行比较:

// Here you are create an uninitialized variable of type SFSpeechRecognizer
// this will then hold the SFSpeechRecognizer when you initialize it in the next line
SFSpeechRecognizer *speechRecognizer;
// This is accomplishing the same logic as the above Swift call
speechRecognizer = [[SFSpeechRecognizer alloc] initWithLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en-US"]];

如果您更喜欢将它写成一行,您可以重新编写objective-c调用,使其看起来像这样:

SFSpeechRecognizer *speechRecognizer = [[SFSpeechRecognizer alloc] initWithLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en-US"]];

两种方法都没有问题,只是 Swift 可以推断变量类型,因此无需在启动语音识别器之前创建一个空变量。Objective-C不能推断变量类型,因此命令可能已被拆分,只是为了使行更短。


推荐阅读