ios - 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 真正做的事情之间的区别很模糊。
感谢您的任何建议或见解。
解决方案
想想 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不能推断变量类型,因此命令可能已被拆分,只是为了使行更短。
推荐阅读
- sql - postgres 查找同一列的数字之间的差异
- vbscript - 当路径中的句点被截断时如何获取基本名称?
- r - 如何在R中的数据框中找到2行值之间的百分比差异
- python - 基于关键比较两个数据帧
- c# - Winform 应用程序为名称为“程序”的数据库表引发错误
- google-drive-api - googleapi:错误 403:超出速率限制,rateLimitExceeded
- python - 使用python求和并追加2个文件的输入
- python - 如何在匹配列值上垂直合并数据框
- reactjs - 有人可以解释为什么我不应该直接更新 React `context` 中的值吗?
- sql-server - 如何返回一个依赖于另一个值的值?