Остановка 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 было бы более логичным.

Надеюсь, это помогло.

Другие вопросы по тегам