Могу ли я использовать устаревшую функцию в SwiftUI

Я разрабатываю приложение для macOS, используя Xcode 14.0 с Swift 5.7 и SwiftUI. Я использую macOS 12.6 на своем MacBook M1 Pro. Мне нужно поддерживать как минимум macOS 11.0, а это означает, что есть много новых функций SwiftUI, которые я не могу использовать из-за того, что им нужна macOS 12.0+. Одна функция, которую я довольно часто использую для макета SwiftUI, — это overlay(_:alignment:). Согласно документу Apple, он устарел. Это интересно, потому что я все еще могу использовать его в своем коде с описанной настройкой. Однако не сломает ли это приложение при развертывании, если функция технически устарела? Apple не очень хороша с обратной совместимостью в целом, и также очень сложно найти информацию об обратной совместимости, пока ваше приложение не сломается или не будет отклонено из App Store. Как упоминалось ранее, я не могу использовать предложенный оверлей(alignment:content:), потому что для этого требуется macOS 12.0+.

Может быть, мне следует просто отказаться от macOS 11 и потребовать macOS 12, поскольку прошло уже несколько лет, но, судя по тому, что я читал, многие пользователи (> 70%) все еще используют macOS 11 на основе опроса, проведенного в 2021 году. Может быть, теперь все по-другому macOS 13 уже вышла.

Если вы ориентируетесь на версию, в которой метод не устарел, то его можно использовать. В конце концов, новый метод недоступен в этих более ранних версиях. Также может быть хорошей идеей использовать новый метод, если он доступен, добавив проверки if #available(...).

Sweeper 21.11.2022 19:40

Если я не предоставлю новый метод, если # available(...) вызовет ли это проблему в системе, чем запуск более новой версии macOS? В принципе, это совместимо вперед?

Patratacus 21.11.2022 19:43
Шаблоны Angular PrimeNg
Шаблоны Angular PrimeNg
Как привнести проверку типов в наши шаблоны Angular, использующие компоненты библиотеки PrimeNg, и настроить их отображение с помощью встроенной...
Создайте ползком, похожим на звездные войны, с помощью CSS и Javascript
Создайте ползком, похожим на звездные войны, с помощью CSS и Javascript
Если вы веб-разработчик (или хотите им стать), то вы наверняка гик и вам нравятся "Звездные войны". А как бы вы хотели, чтобы фоном для вашего...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Начала с розового дизайна
Начала с розового дизайна
Pink Design - это система дизайна Appwrite с открытым исходным кодом для создания последовательных и многократно используемых пользовательских...
Шлюз в PHP
Шлюз в PHP
API-шлюз (AG) - это сервер, который действует как единая точка входа для набора микросервисов.
14 Задание: Типы данных и структуры данных Python для DevOps
14 Задание: Типы данных и структуры данных Python для DevOps
проверить тип данных используемой переменной, мы можем просто написать: your_variable=100
1
2
67
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Безопасно продолжать использовать устаревшую версию overlay. Apple не удалит его из SwiftUI в течение многих лет, если вообще когда-либо.

Но если вы хотите быть в большей безопасности, вы можете написать свой собственный модификатор, который использует устаревший overlay, если новый overlay недоступен:

extension View {
    @ViewBuilder
    func overlayWorkaround<V: View>(
        alignment: Alignment = .center,
        @ViewBuilder _ content: () -> V
    ) -> some View {
        if #available(macOS 12, macCatalyst 15, iOS 15, tvOS 15, watchOS 8, *) {
            self.overlay(alignment: alignment, content: content)
        } else {
            self.overlay(content(), alignment: alignment)
        }
    }
}

Это очень элегантный подход. Спасибо.

Patratacus 21.11.2022 20:13

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