Как я могу добавить настраиваемое намерение, для которого требуется 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 и будет выполнять только соответствующий код.
Итак, вы в безопасности, с вашей дополнительной намеренной поддержкой.