IOS / Objective-C / Swift / Speech: укажите локаль при объявлении переменной SFSpeech Recognizer - PullRequest
0 голосов
/ 10 сентября 2018

Я пытаюсь перевести некий Swift, который я только что изучил, в Objective-C для проекта Speech.

Очевидно, что 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.

Спасибо за любые предложения или идеи.

1 Ответ

0 голосов
/ 10 сентября 2018

Представьте, что вызов 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"]];

Вы можете переписать вызов target-c, чтобы он выглядел так, если вы предпочитаете сделать его одной строкой:

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

В любом подходе нет ничего плохого, просто Swift может вывести тип переменной, поэтому нет необходимости создавать пустую переменную до инициации распознавателя речи. Objective-C может NOT определить тип переменной, поэтому команда может быть разделена только для того, чтобы сделать строку немного короче.

...