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

Я пытаюсь добавить пользовательское намерение для поддержки ярлыков 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 ответ

Нет,

#available

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

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

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

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

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