Остановка Speechkit от сбоя устройств iOS 9
Я сильно интегрировал Speechkit в один из контроллеров представления моего приложения. Speechkit доступен только на iOS 10, но мне также нужно, чтобы мое приложение работало на устройствах с iOS 9.
Прямо сейчас мое приложение вылетает при запуске на устройствах iOS 9; Как я могу предотвратить Speechkit от сбоя iOS версии 9 и более ранних? Могу ли я создать два отдельных файла контроллера представления, или я должен поставить if #available(iOS 10, *) {
вокруг каждой ссылки Speechkit?
Редактировать: Что я могу сделать вместо этого?
import Speech
class ViewController2: UIViewController, SFSpeechRecognizerDelegate {
if #available(iOS 9, *) { // ERROR: Expected Declaration
private let speechRecognizer = SFSpeechRecognizer(locale: Locale(identifier: "en-US"))!
}
func doSomeStuffWithSpeech() {
...
}
...
}
1 ответ
Я сильно интегрировал Speechkit
Если это так, я думаю, что создание двух отдельных viewControllers может быть проще - или более логичным - вы можете решить, какой из них следует просматривать на основе #available(iOS 10.0, *)
Давайте предположим, что вы представите ViewController2
основанный на нажатии кнопки в другом ViewController (во фрагменте кода я назвал его PreviousViewController
):
class PreviousViewController: UIViewController {
//...
@IBAction func presentApproriateScene(sender: AnyObject) {
if #available(iOS 10.0, *) {
// present the ViewController that heavily integrated with Speechkit
// maybe by perfroming a segue:
performSegueWithIdentifier("segue01", sender: self)
// or maybe by getting the it from the storyboard
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let vc1 = storyboard.instantiateViewControllerWithIdentifier("vc1")
presentViewController(vc1, animated: true, completion: nil)
} else {
// present the ViewController that does not suupport Speechkit
// maybe by perfroming a segue:
performSegueWithIdentifier("segue02", sender: self)
// or maybe by getting the it from the storyboard
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let vc2 = storyboard.instantiateViewControllerWithIdentifier("vc2")
presentViewController(vc2, animated: true, completion: nil)
}
}
//...
}
Также вы можете использовать его при объявлении переменных:
class ViewController: UIViewController {
//...
if #available(iOS 10.0, *) {
private let speechRecognizer = SFSpeechRecognizer(locale: Locale(identifier: "en-US"))!
} else {
// ...
}
//...
}
Но опять же, как вы упомянули, если у вас "тяжелая" интеграция с Speechkit, я предполагаю, что создание двух Viewcontroller было бы более логичным.
Надеюсь, это помогло.