Як я бачу, яку версію Swift я використовую?


566

Я щойно створив новий проект Swift в Xcode. Мені цікаво, яку версію Swift використовує.

Як я можу побачити в Xcode або терміналі, яку версію Swift я використовую всередині свого проекту?


7
Окрім заголовку stackoverflow.com/questions/29140476/…, я не знаходжу подібності з цим питанням, цього достатньо, щоб позначити це питання як дублікат . Суть цього питання полягає не в тому, як знайти версію Swift програмно , а в тому, як знайти версію Swift загальним способом (через термінал або Xcode або т.д.). Це велика різниця.
Девід Снабель

Відповіді:


406

В налаштуваннях проекту є блок "Swift Compiler - Languages", який зберігає інформацію про версію мови Swift у форматі "ключ-значення". Він покаже вам всю доступну (підтримувану) версію мови Swift для вашого Xcode та активної версії також галочкою.

Проект ► (Виберіть ціль проекту) ► Налаштування збірки ► (Введіть 'swift_version' на панелі пошуку) Швидка мова компілятора ► Версія мови швидкої мови ► Клацніть на списку мов, щоб відкрити її (і на будь-якому списку з’явиться галочка -item, це буде поточна швидка версія).

Подивіться цей знімок для легкого розуміння:

xcode з виділеними описаними областями


За допомогою наступного коду програмно ви можете знайти версію Swift, що підтримується вашим проектом.

#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")

#elseif swift(>=3.2)
print("Hello, Swift 3.2")

#elseif swift(>=3.0)
print("Hello, Swift 3.0")

#elseif swift(>=2.2)
print("Hello, Swift 2.2")

#elseif swift(>=2.1)
print("Hello, Swift 2.1")

#elseif swift(>=2.0)
print("Hello, Swift 2.0")

#elseif swift(>=1.2)
print("Hello, Swift 1.2")

#elseif swift(>=1.1)
print("Hello, Swift 1.1")

#elseif swift(>=1.0)
print("Hello, Swift 1.0")

#endif

Ось результат за допомогою Playground (з Xcode 11.x )

введіть тут опис зображення


10
Я думаю, що це правильна відповідь. Простіше, ніж викликати термінал. (особливо якщо у вас інстальована інша версія Xcode)
Майк Кескінов,

17
Це правильна відповідь, оскільки швидка версія налаштована за цільовою ознакою.
Ендрю Пол Сіммонс

2
Я не бачу цієї властивості у своєму проекті з Xcode 8.1
вихід з системи

6
ви можете побачити цю властивість у останніх версіях xcode
Parkhya Dev

1
@JonMcClung - той самий варіант також доступний у Xcode 10.1. Я просто перевірив це.
Крунал

500

Що я роблю, це сказати в Терміналі:

$ xcrun swift -version

Вихід для Xcode 6.3.2:

Apple Swift version 1.2 (swiftlang-602.0.53.1 clang-602.0.53)

Звичайно, це передбачає, що ваш xcrunправильно вказує на вашу копію Xcode. Якщо, як я, ви жонглюєте декількома версіями Xcode, це може викликати занепокоєння! Щоб переконатися, що це так, скажіть

$ xcrun --find swift

і подивіться на шлях до Xcode, який він вам показує. Наприклад:

/Applications/Xcode.app/...

Якщо це ваш Xcode, то вихід з нього -versionбуде точним. Якщо вам потрібно повторно вказати xcrun, скористайтеся спливаючим меню Інструменти командного рядка на панелі налаштувань Xcode's Locations.


8
Ви також можете скористатися xcode-select -pдля друку шляху до Xcode, який використовуватиме xcrun, та sudo xcode-select -s /path/to/Xcode.appзмінити його.
Джек Лоуренс

4
Я щойно почав вивчати ios-розробку, і я здивований, що xcode не дозволяє вам вибирати швидку версію, а навіть не повідомляє вам версію від GUI.
Олексій

@RadekWilczak Я не знаю, що ви маєте на увазі під «має бути». Я просто скопіював опубліковану команду і вставив її в термінал і натиснув Return, і це працює. Можливо, є й інша альтернатива, але те, що я сказав, не є помилковим.
матовий

1
Це дало мені неправильну відповідь. Оскільки швидкість налаштована на кожну ціль. Дивіться відповідь нижче від @Krunal для найкращої відповіді.
Ендрю Пол Сіммонс

Я погоджуюся з усіма "правильним способом є встановлення SWIFT_VERSION" на проект. Однак у більш ранніх версіях Xcode, як 8.2, в інтерфейсі не чітко зазначено, яка версія XCode підтримується в проекті, а просто "Використовувати Legacy Swift Language Version" в інтерфейсі з Так, Ні, не вказано. Підхід до командного рядка надзвичайно корисний, щоб мати можливість швидко запитати відповідь на те, яка доступна максимальна швидка версія.
truedat101

104

Відкрийте термінал і напишіть:

swift -version

12
Це не обов'язково версія швидкості, яку бачить Xcode. Крім того, ви можете зробити швидкий, не маючи Xcode.
asiby

64

З Xcode 8.3 далі Build Settingsє ключ Swift Language Versionзі значенням швидкої версії, яку використовує ваша мета.

Для старих Xcodes використовуйте це рішення, відкрийте термінал і введіть наступні команди

Випадок 1: Ви встановили лише одну програму Xcode

swift -version

Випадок 2: Ви встановили кілька додатків Xcode

  • Перемикач active developer directory(Замініть Xcode_7.3.appнаступну команду своїм ім'ям файлу програми Xcode з каталогу додатків, для якого потрібно перевірити швидку версію)

     sudo xcode-select --switch /Applications/Xcode_7.3.app/Contents/Developer
  • Тоді

     swift -version

ПРИМІТКА: Від Xcode 8 до Xcode 8.2.x ви можете використовувати swift 2.3, навіть якщо Xcode 8 використовує швидку версію 3.x як стандартну швидку версію. Щоб використовувати swift 2.3, просто увімкніть прапор Use Legacy Swift Language Versionна YESз Build Settingі XCode використовуватиме Swift 2.3 для цієї мети проекту.


21

Ви можете побачити та вибрати, яку версію Xcode версії Swift використовують у:

Мета -> Налаштування збірки -> Мовна версія версії :

введіть тут опис зображення

Це доступно в Xcode 8.3 та Xcode 9 (не перевіряли старіші версії)


2
Swift Language Versionне відображається як налаштування в моєму проекті Xcode 8.2.1. Це є Use Legacy Swift Language Version.
Кріс Принс

1
@ChrisPrince Так, Swift Language Versionтут не існувало Build Settingsдо Xcode 8.3 .... у попередніх версіях Xcode 8.x Use Legacy Swift Language Version, No= Swift 3 та Yes= Swift 2.3
William GP

17

Ця публікація reddit допомогла мені: https://www.reddit.com/r/swift/comments/4o8atc/xcode_8_which_swift/d4anpet

Xcode 8 використовує Swift 3.0 за замовчуванням. Але ви можете увімкнути Swift 2.3. Перейдіть до "Налаштування збірки" проекту та встановіть "Використовувати застарілу мову швидкої версії" на ТАК.

Добрий старий reddit :)


1
Я не можу знайти це за допомогою пошуку "Використовувати Legacy Swift Language Version" або "Legacy"
JerryZhou

Я використовую останню версію Xcode версії 8.3.2 (8E2002) і swift 3 там у версії мови Swift. Тепер я хочу змінити це на swift 2.3, але є лише один варіант swift 3.0, а другий не визначений. тож, будь ласка, підкажете, як це можливо? щоб отримати швидкий 2.3 в моєму поточному проекті? @alexisSchreier
ARSAL

14

Щоб побачити версію за замовчуванням swift, встановлену на вашій машині, потім з командного рядка введіть наступне:

swift --version

Apple Swift версія 4.1.2 (swiftlang-902.0.54 clang-902.0.39.2)

Мета: x86_64-apple-darwin17.6.0

Це, швидше за все, версія, яка входить у версію магазину додатків Xcode, яку ви встановили (якщо ви її не змінили).

Якщо ви хочете визначити, що фактична версія Swift використовується в певній версії Xcode (наприклад, бета-версія), то з командного рядка викликайте швидкий бінарний файл у пакеті Xcode і передайте йому параметр --version

/Applications/Xcode-beta.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift --version

Apple Swift версія 4.2 (swiftlang-1000.0.16.7 clang-1000.10.25.3)

Мета: x86_64-apple-darwin17.6.0



1

Я використовую Swift від Google Colab. Ось як це перевірити в Colab.

!/swift/toolchain/usr/bin/swift --version

Результат - 5.0-dev


-1

Бонусний внесок: я використовую користувальницький скрипт node.js для витягування чистого рядка для використання з документацією Jazzy. Ви можете скористатися цим, якщо зможете знайти місце для його роботи у своєму розробнику:

Запрошено зі сценарію Bash:

#!/bin/bash
swiftversion=$(node SwiftVerSlicer.js "${xcrun swift -version}");
echo $swiftversion

SwiftVerSlicer.js:

// begin script
const inputString = `${process.argv[2]}`
let searchTerm = (inputString.indexOf('(') - 1)//-1 cause whitespace
let version = inputString.slice(0,searchTerm)
console.log(version)
// end script

Ви також можете використовувати регулярний вираз, але робіть все, що завгодно:]


-1

Щойно ввівши команду swift в термінал, вона покаже версію під час входу в консоль Swift. (Щось подібне нижче)

System-IOSs-MacBook-Air:~ system$ swift
Welcome to Apple Swift version 5.1 (swiftlang-1100.0.270.13 clang-1100.0.33.7).
Type :help for assistance.

-1
  1. Виберіть проект
  2. Налаштування побудови
  3. шукати "швидку мову"
  4. тепер ви можете побачити, яку швидку версію ви використовуєте у своєму проекті

https://i.stack.imgur.com/Ojn3m.png


Чим це відрізняється від першого рішення, наведеного в stackoverflow.com/a/46080904/1187415 ?
Мартін Р

добре, я збираюся кинути основний каталог проектів, і коли ви вводите "швидку мову", це лише показати швидку версію вгорі в "Налаштуваннях побудови", окрім цього ..
virus virus goti

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.