Jak sprawdzić, której wersji Swift używam?

566

Właśnie stworzyłem nowy projekt Swift w Xcode. Zastanawiam się, jakiej wersji Swift używa.

Jak mogę zobaczyć, w Xcode lub terminalu, jakiej wersji Swift używam w swoim projekcie?

David Snabel
źródło
7
Poza tytułem stackoverflow.com/questions/29140476/... Nie widzę podobieństwa do tego pytania, wystarczyłoby, aby oznaczyć je jako duplikat . Istota tego pytania nie polega na tym, jak znaleźć wersję Swift programowo , ale jak znaleźć wersję Swift w sposób ogólny (przez terminal, Xcode itp.). To duża różnica.
David Snabel,

Odpowiedzi:

406

Ustawienia kompilacji projektu zawierają blok „Swift Compiler - Languages”, który przechowuje informacje o Swift Language Version w formacie klucz-wartość. Pokaże ci wszystkie dostępne (obsługiwane) Swift Wersja językowa dla twojego Xcode i wersji aktywnej również poprzez znacznik wyboru.

Projekt ► (Wybierz cel projektu) ► Ustawienia kompilacji ► (Wpisz „swift_version” na pasku wyszukiwania) Swift Język kompilatora ► Swift Wersja językowa ► Kliknij na listę języków, aby ją otworzyć (na dowolnym z list pojawi się znacznik wyboru - pozycja, która będzie aktualną szybką wersją).

Spójrz na tę migawkę, dla łatwego zrozumienia:

xcode z podświetlonymi opisanymi obszarami


Za pomocą następującego kodu programowo możesz znaleźć wersję Swift obsługiwaną przez Twój projekt.

#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

Oto wynik za pomocą Playground (z Xcode 11.x )

wprowadź opis zdjęcia tutaj

Krunal
źródło
10
Myślę, że to poprawna odpowiedź. Łatwiej niż wzywając terminal. (szczególnie jeśli masz zainstalowaną inną wersję Xcode)
Mike Keskinov
17
To poprawna odpowiedź, ponieważ szybka wersja jest konfigurowana na podstawie celu.
Andrew Paul Simmons
2
Nie widzę tej propozycji w moim projekcie z Xcode 8.1
wyloguj się
6
możesz zobaczyć tę właściwość w najnowszych wersjach xcode
Parkhya Dev
1
@JonMcClung - Ta sama opcja jest dostępna również w Xcode 10.1. Właśnie to sprawdziłem.
Krunal
500

To, co robię, to mówię w terminalu:

$ xcrun swift -version

Dane wyjściowe dla Xcode 6.3.2 to:

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

Oczywiście przy założeniu, że xcrunpoprawnie wskazujesz swoją kopię Xcode. Jeśli, podobnie jak ja, żonglujesz kilkoma wersjami Xcode, możesz się martwić! Aby upewnić się, że tak jest, powiedzmy

$ xcrun --find swift

i spójrz na ścieżkę do Xcode, którą ci pokazuje. Na przykład:

/Applications/Xcode.app/...

Jeśli to twój Xcode, to wynik z -versionjest dokładny. Jeśli chcesz zmienić miejsce xcrun, użyj menu podręcznego Narzędzia wiersza poleceń w panelu preferencji Lokalizacje Xcode.

matowy
źródło
8
Możesz także użyć xcode-select -pdo wydrukowania ścieżki do Xkodu, którego użyje xcrun, i sudo xcode-select -s /path/to/Xcode.appdo jej zmiany.
Jack Lawrence
4
Właśnie zacząłem uczyć się programowania ios i jestem zaskoczony, że xcode nie pozwala ci wybrać wersji swift ani nawet znać wersji z GUI.
Alex
@RadekWilczak Nie wiem, co rozumiesz przez „powinno być”. Właśnie skopiowałem wysłane polecenie i wkleiłem do Terminala i nacisnąłem Return, i to działa. Więc może jest inna alternatywa, ale to, co powiedziałem, nie jest złe.
mat.
1
To dało mi złą odpowiedź. Ponieważ swift jest skonfigurowany dla każdego celu. Zobacz odpowiedź poniżej @Krunal, aby uzyskać najlepszą odpowiedź.
Andrew Paul Simmons
Zgadzam się ze wszystkimi „poprawnym sposobem jest ustawienie SWIFT_VERSION” dla każdego projektu. Jednak we wcześniejszych wersjach Xcode, takich jak 8.2, nie podaje on wyraźnie w interfejsie użytkownika, która wersja XCode jest obsługiwana w projekcie, a po prostu ma „Użyj starszej wersji językowej” w interfejsie użytkownika z Tak, Nie, nieokreślony. Podejście oparte na linii poleceń jest niezwykle przydatne, aby móc szybko wyszukać odpowiedź na pytanie, jaka jest maksymalna dostępna szybka wersja.
truedat101,
104

Otwórz terminal i napisz:

swift -version
Alzayed
źródło
12
Xcode niekoniecznie jest wersją swift. Poza tym możesz mieć szybkie bez Xcode.
asiby
64

Począwszy od Xcode 8.3, Build Settingsma klucz Swift Language Versiono wartości szybkiej wersji, której używa twój cel.

W przypadku starszych Xcodes skorzystaj z tego rozwiązania, otwórz terminal i wpisz następujące polecenia

Przypadek 1: Zainstalowałeś tylko jedną aplikację Xcode

swift -version

Przypadek 2: Zainstalowałeś wiele aplikacji Xcode

  • Przełącz active developer directory(Zamień Xcode_7.3.appnastępujące polecenie na nazwę pliku aplikacji Xcode z katalogu aplikacji, dla którego chcesz sprawdzić szybką wersję)

     sudo xcode-select --switch /Applications/Xcode_7.3.app/Contents/Developer
  • Następnie

     swift -version

UWAGA: Od Xcode 8 do Xcode 8.2.x możesz używać swift 2.3, nawet jeśli Xcode 8 używa swift 3.x jako domyślnej wersji szybkiej. Aby użyć swift 2.3, po prostu włącz flagę Use Legacy Swift Language Versiondo YESz, Build Settinga XCode użyje Swift 2.3 dla tego celu projektu.

Aditya Deshmane
źródło
21

Możesz zobaczyć i wybrać, której wersji Swift używa Xcode w:

Cel -> Ustawienia kompilacji -> Swift Wersja językowa :

wprowadź opis zdjęcia tutaj

Jest to dostępne w Xcode 8.3 i Xcode 9 (nie sprawdziłem starszych wersji)

Joern
źródło
2
Swift Language Versionnie pojawia się jako ustawienie w moim projekcie Xcode 8.2.1. Ma Use Legacy Swift Language Version.
Chris Prince
1
@ChrisPrince Tak, Swift Language Versionnie istniał tu Build Settingsaż do Xcode 8.3 .... we wcześniejszych wersjach Xcode 8.x Use Legacy Swift Language Version, No= Swift 3, Yes= = Swift 2.3
William GP
17

Ten post reddit pomógł mi: https://www.reddit.com/r/swift/comments/4o8atc/xcode_8_which_swift/d4anpet

Xcode 8 używa domyślnie Swift 3.0. Ale możesz włączyć Swift 2.3. Przejdź do Ustawień kompilacji projektu i ustaw „Użyj starszej wersji szybkiej wersji językowej” na TAK.

Dobry stary reddit :)

alexisSchreier
źródło
1
Nie mogę tego znaleźć, wyszukując „Użyj
starszej
Używam najnowszej wersji Xcode 8.3.2 (8E2002) i swift 3 w Swift Language Version. Teraz chcę zmienić to na swift 2.3, ale jest tylko jedna opcja swift 3.0, a druga nie jest określona. więc czy mógłbyś wskazać, jak to byłoby możliwe? uzyskać szybki 2.3 w moim obecnym projekcie? @alexisSchreier
Arsal
14

Aby zobaczyć domyślną wersję swift zainstalowaną na twoim komputerze, a następnie z wiersza poleceń, wpisz następujące polecenie:

swift --version

Apple Swift wersja 4.1.2 (swiftlang-902.0.54 clang-902.0.39.2)

Cel: x86_64-apple-darwin17.6.0

Jest to najprawdopodobniej wersja zawarta w zainstalowanej wersji Xcode w sklepie z aplikacjami (chyba że została zmieniona).

Jeśli chcesz określić faktyczną wersję Swift używaną przez określoną wersję Xcode (na przykład beta), to z poziomu wiersza poleceń wywołaj szybki plik binarny w pakiecie Xcode i przekaż mu parametr --version

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

Apple Swift wersja 4.2 (swiftlang-1000.0.16.7 clang-1000.10.25.3)

Cel: x86_64-apple-darwin17.6.0

Paul King
źródło
1

Używam Swift z Google Colab. Oto jak to sprawdzić w Colab.

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

Wynik to 5.0-dev

korakot
źródło
-1

Dodatkowy wkład: używam niestandardowego skryptu node.js, aby wyodrębnić czysty ciąg znaków do użytku z dokumentacją Jazzy. Możesz skorzystać z tego, jeśli możesz znaleźć miejsce do pracy w procesie tworzenia:

Wywołany ze skryptu 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

Oczywiście możesz także użyć wyrażenia regularnego, ale rób co chcesz:]


źródło
-1

Po prostu wprowadzając polecenie swift w terminalu, wyświetli wersję, logując się do konsoli Swift. (Coś jak poniżej)

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.
SuperNova
źródło
-1
  1. Wybierz swój projekt
  2. Ustawienia kompilacji
  3. wyszukaj „szybki język”
  4. teraz możesz zobaczyć, której szybkiej wersji używasz w swoim projekcie

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

wirusowe goti
źródło
Czym różni się to od pierwszego rozwiązania podanego na stackoverflow.com/a/46080904/1187415 ?
Martin R
no cóż, zamierzam rzucić główny katalog projektu, a kiedy wpiszesz „szybki język”, pokażę tylko szybką wersję na wierzchu w Ustawieniach kompilacji, nic poza tym…
wirusowe goti
-1

Otrzymasz to w ustawieniach projektu

wprowadź opis zdjęcia tutaj

FARUQUE HOSSAIN
źródło