До Swift 4 версия компилятора и язык были одинаковыми. Но начиная с Swift 4, компилятор может работать в режиме совместимости с предыдущими версиями Swift. проверьте больше информации о режимах совместимости в заметках о выпуске Swift 4.0
Параметр сборки Xcode SWIFT_VERSION
устанавливает флаг компилятора -swift-version
, который является языковым режимом. В распечатанном ниже компиляторе swift этот параметр только изменяет интерпретацию ввода.
swiftc -h|grep 'Swift language version number'
-swift-version <vers> Interpret input according to a specific Swift language version number
Таким образом, при выборе версии Swift Language до 4.2 это не означает использование компилятора Swift 4.2. Версия компилятора по-прежнему будет 5.1.3, настройка Swift Language Version дает команду компилятору работать в режиме совместимости Swift 4.2. Режим совместимости означает, что вам может не понадобиться изменять код swift 4.2 для использования новой версии компилятора. Потому что компилятор, работающий в режиме совместимости, позволяет скомпилировать и запустить код Swift версии 4.2 вместе с кодом версии 5 и выше.
![compiler options](https://i.stack.imgur.com/r5Ofc.jpg)
Компилятор Swift 5 с режимом совместимости может компилировать код, написанный с использованием либо синтаксиса Swift 4 , Синтаксис Swift 4.2 или Синтаксис Swift 5 .
Вот пример кода, создайте файл test.swift с кодом ниже:
//code written before siwft 5
let firstName = "michael jackson"
let offset = firstName.endIndex.encodedOffset
// Check swift version being used.
#if swift(>=5.2)
print("Hello, Swift 5.2")
#elseif swift(>=5.1)
print("Hello, Swift 5.1")
#elseif swift(>=5.0)
print("Hello, Swift 5.0")
#elseif swift(>=4.2)
print("Hello, Swift 4.2")
#elseif swift(>=4.1)
print("Hello, Swift 4.1")
#elseif swift(>=4.0)
print("Hello, Swift 4.0")
#endif
предположим, что приведенный выше код был написан до swift 5 с использованием компилятора swift 4, с которым этот код будет компилироваться ошибок нет, как показано ниже.
![enter image description here](https://i.stack.imgur.com/JMzuV.jpg)
После того, как Swift 5 будет выпущен, если вы попытаетесь скомпилировать этот код с помощью компилятора Swift 5, как показано ниже.
![Swift 5 compiler](https://i.stack.imgur.com/9fnOm.jpg)
Вы получите предупреждение, показанное выше, поскольку encodedOffset
устарело в swift 5.
Вы можете понизить версию и использовать компилятор swift 4 или вы можете использовать компилятор Swift 5 в режиме совместимости с флагом компилятора -swift-version, как показано ниже.
![Swift 5 compiler with compatibility mode](https://i.stack.imgur.com/IU9nI.jpg)
Важно отметить, что * Компилятор 1054 * Swift 4 и компилятор Swift 5 в режиме совместимости Swift-4 - это не одно и то же. Новые функции языка swift 5 обычно доступны для компилятора swift 5, работающего в режиме совместимости. Это позволяет разработчикам использовать новые функции, даже если они не могут выполнить обновление до Swift 5. Новые функции Swift 5 не будут доступны для Swift 4 компилятора .