Как я могу добавить настраиваемое намерение, для которого требуется iOS 12 при нацеливании на более старую версию iOS? - PullRequest
0 голосов
/ 11 ноября 2018

Я пытаюсь добавить пользовательское намерение для поддержки ярлыков Siri в моем приложении, предназначенном для iOS 10.3. Xcode автоматически генерирует целевые классы и протоколы, но все сгенерированные классы и протоколы имеют атрибут ниже:

@available(iOS 12.0, watchOS 5.0, *)

Мне известно о #available (...), но он не используется для включения или исключения кода во время компиляции, поэтому я не уверен, что делать с добавлением настраиваемого намерения, если моя цель установлена ​​на пред-iOS 12.

В приведенном ниже фрагменте MyIntentHandling и MyIntentResponse автоматически генерируются Xcode. Однако здесь нельзя использовать #available.

public class MyIntentHandler: NSObject, MyIntentHandling {

    func confirm(intent: MyIntent, completion: @escaping (MyIntentResponse) -> Void) { ... }

    func handle(intent: MyEntryIntent, completion: @escaping (MyIntentResponse) -> Void) { ... }
}

У кого-нибудь есть хорошее решение?

1 Ответ

0 голосов
/ 11 ноября 2018

Нет,

#available

для проверки компиляции и выполнения.

Компилятор Swift проверяет во время компиляции, что не вызываются методы, которые не поддерживаются для выбранной вами цели развертывания, и вынуждает вас использовать условия #available. Итак, начиная с Xcode 9 гораздо безопаснее поддерживать старые цели развертывания iOS и использовать новые функции.

Во время выполнения выполняется проверка, соответствует ли условие #available текущей текущей версии iOS и выполняется ли только соответствующий код.

Итак, вы в безопасности, с вашей дополнительной намеренной поддержкой.

...