Как Swift 5.1 Opaque Result Types взаимодействует со старыми ОС (например, iOS 12) - PullRequest
0 голосов
/ 10 июня 2019

В сеансе WWDC 2019 402 « Что нового в Swift », говорящий при обсуждении функции Swift 5.1 Непрозрачный тип результата (SE-0244) упоминает, что эта функция будет работают только на новых ОС:

Требуется новая поддержка Swift во время выполнения

Доступно в MacOS Catalina, iOS 13, tvOS 13, watchOS 6 и более поздних версиях

Guard использует с проверкой доступности при развертывании в более ранних версиях ОС

В Xcode 11 я не получаю никаких ошибок сборки (или предупреждений), если пишу код, используя эту функцию, при таргетинге на iOS 11 и выше. Я не завернул ни один код в if #available(iOS 13.0, *) проверках. E.g.:

protocol Shape { }
class Square: Shape { }
class Triangle: Shape { }

func foo() -> some Shape {
    return Square()
}

и затем вызов foo() из некоторого кода в моем приложении.

Что произойдет, если этот код будет работать на устройствах до iOS 13? Является ли отсутствие ошибки сборки самой ошибкой? Существует ли полный список функций Swift 5.1, требующих новой поддержки времени выполнения и, следовательно, конкретной версии ОС?

1 Ответ

4 голосов
/ 10 июня 2019

Ошибка самой ошибки сборки сама по себе является ошибкой?

Да.И это четко задокументировано.Как указано в заметках о выпуске :

Для объявлений с некоторыми типами возвращаемых протоколов требуется среда выполнения Swift 5.1 в iOS 13, macOS 10.15, watchOS 6 или tvOS 13, но компилятор Swift не применяет это. Запуск приложения, использующего some типы возврата в предыдущих версиях операционной системы может произойти сбой во время выполнения ... Обходной путь: Развертывайте только двоичные файлы, использующие some возвращаемые типы, в iOS 13, macOS 10.15, watchOS 6 и tvOS 13. Избегайте их в коде, который должен выполняться в предыдущих версиях операционной системы.

Итак, делайте чтовам говорят: используйте availability охранника или готовьтесь умереть.

...