Wie sehe ich, welche Version von Swift ich verwende?


567

Ich habe gerade ein neues Swift-Projekt in Xcode erstellt. Ich frage mich, welche Version von Swift verwendet wird.

Wie kann ich in Xcode oder im Terminal sehen, welche Version von Swift ich in meinem Projekt verwende?


7
Abgesehen vom Titel stackoverflow.com/questions/29140476/… finde ich keine Ähnlichkeit mit dieser Frage, die ausreicht, um diese Frage als doppelt zu kennzeichnen . Das Wesentliche dieser Frage ist nicht, wie man die Version von Swift programmgesteuert findet , sondern wie man die Version von Swift allgemein findet (über Terminal oder Xcode oder usw.). Das ist ein großer Unterschied.
David Snabel

Antworten:


407

Die Projekterstellungseinstellungen enthalten den Block 'Swift Compiler - Languages', in dem Informationen zur Swift Language Version im Schlüsselwertformat gespeichert werden. Es zeigt Ihnen alle verfügbaren (unterstützten) Swift Language-Versionen für Ihren Xcode und die aktive Version auch durch ein Häkchen an.

Projekt ► (Wählen Sie Ihr Projektziel aus) ► Build-Einstellungen ► (Geben Sie 'swift_version' in die Suchleiste ein) Swift Compiler Language ► Swift Language Version ► Klicken Sie auf die Sprachliste, um sie zu öffnen (und auf einer Liste wird ein Häkchen angezeigt) -item, das wird die aktuelle schnelle Version sein).

Schauen Sie sich diesen Schnappschuss an, um das Verständnis zu erleichtern:

xcode mit hervorgehobenen Bereichen


Mithilfe des folgenden Codes können Sie programmgesteuert die von Ihrem Projekt unterstützte Swift-Version finden.

#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

Hier ist das Ergebnis mit Playground (mit Xcode 11.x )

Geben Sie hier die Bildbeschreibung ein


10
Ich denke das ist die richtige Antwort. Einfacher als das Terminal anzurufen. (vor allem, wenn Sie eine andere Version von Xcode installiert haben)
Mike Keskinov

17
Dies ist die richtige Antwort, da die schnelle Version pro Ziel konfiguriert wird.
Andrew Paul Simmons

2
Ich sehe diese Eigenschaft nicht in meinem Projekt mit Xcode 8.1
Abmeldung

6
Sie können diese Eigenschaft auf den neuesten Versionen von xcode
Parkhya Dev

1
@ JonMcClung - Die gleiche Option ist auch in Xcode 10.1 verfügbar. Ich habe es gerade überprüft.
Krunal

500

Was ich tue, ist im Terminal zu sagen:

$ xcrun swift -version

Die Ausgabe für Xcode 6.3.2 lautet:

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

Dies setzt natürlich voraus, dass Sie xcrunkorrekt auf Ihre Kopie von Xcode zeigen. Wenn Sie wie ich mit mehreren Versionen von Xcode jonglieren, kann dies eine Sorge sein! Um sicherzugehen, dass es so ist, sagen wir

$ xcrun --find swift

und schauen Sie sich den Pfad zu Xcode an, den er Ihnen zeigt. Zum Beispiel:

/Applications/Xcode.app/...

Wenn das Ihr Xcode ist, ist die Ausgabe von -versionkorrekt. Wenn Sie einen neuen Termin festlegen müssen xcrun, verwenden Sie das Einblendmenü " Befehlszeilentools" im Einstellungsbereich "Standorte" von Xcode.


8
Sie können auch xcode-select -pden Pfad zu dem von xcrun verwendeten Xcode drucken und ihn sudo xcode-select -s /path/to/Xcode.appändern.
Jack Lawrence

4
Ich habe gerade angefangen, die iOS-Entwicklung zu lernen, und ich bin überrascht, dass Sie mit xcode weder die Version von swift auswählen noch die Version über die GUI kennenlernen können.
Alex

@RadekWilczak Ich weiß nicht, was du mit "sollte sein" meinst. Ich habe gerade den geposteten Befehl kopiert und in Terminal eingefügt und die Eingabetaste gedrückt, und es funktioniert. Vielleicht gibt es eine andere Alternative, aber was ich gesagt habe, ist nicht falsch.
Matt

1
Dies gab mir die falsche Antwort. Weil Swift pro Ziel konfiguriert ist. Die beste Antwort finden Sie in der Antwort unten von @Krunal.
Andrew Paul Simmons

Ich stimme allen zu, dass "der richtige Weg ist, die SWIFT_VERSION festzulegen" pro Projekt. In früheren Xcode-Versionen wie 8.2 wird in der Benutzeroberfläche jedoch nicht klar angegeben, welche Version von XCode im Projekt unterstützt wird, und in der Benutzeroberfläche ist nur "Legacy Swift Language Version verwenden" mit "Ja, Nein" angegeben. Der Befehlszeilenansatz ist äußerst nützlich, um die Antwort auf die maximal verfügbare Version schnell abfragen zu können.
truedat101

104

Öffnen Sie das Terminal und schreiben Sie:

swift -version

12
Dies ist nicht unbedingt die Version von Swift, die Xcode sieht. Außerdem können Sie schnell ohne Xcode haben.
Asiby

64

Ab Xcode 8.3 Build Settingshat SchlüsselSwift Language Version mit dem Wert der schnellen Version, die Ihr Ziel verwendet.

Verwenden Sie für ältere Xcodes diese Lösung, öffnen Sie das Terminal und geben Sie die folgenden Befehle ein.

Fall 1: Sie haben nur eine Xcode-App installiert

swift -version

Fall 2: Sie haben mehrere Xcode-Apps installiert

  • Wechseln active developer directory(Ersetzen Sie den Xcode_7.3.appfolgenden Befehl durch den Namen Ihrer Xcode-App-Datei aus dem Anwendungsverzeichnis, für das Sie die schnelle Version überprüfen möchten.)

     sudo xcode-select --switch /Applications/Xcode_7.3.app/Contents/Developer
  • Dann

     swift -version

HINWEIS: Von Xcode 8 bis Xcode 8.2.x können Sie Swift 2.3 verwenden, obwohl Xcode 8 Swift 3.x als Standardversion von Swift verwendet. Um Swift 2.3 zu verwenden, aktivieren Sie einfach das Flag Use Legacy Swift Language Versionto YESfrom Build Settingund XCode verwendet Swift 2.3 für dieses Projektziel.


21

Sie können sehen und auswählen, welche Swift-Version Xcode verwendet in:

Ziel -> Build-Einstellungen -> Swift-Sprachversion :

Geben Sie hier die Bildbeschreibung ein

Dies ist in Xcode 8.3 und Xcode 9 verfügbar (ältere Versionen wurden nicht überprüft)


2
Swift Language Versionwird in meinem Xcode 8.2.1-Projekt nicht als Einstellung angezeigt. Es hat Use Legacy Swift Language Version.
Chris Prince

1
@ChrisPrince Ja, Swift Language Versionexistierte hier Build Settingserst in Xcode 8.3 .... in früheren Xcode 8.x-Versionen Use Legacy Swift Language Version, No= Swift 3 und Yes= Swift 2.3
William GP

17

Dieser reddit-Beitrag hat mir geholfen: https://www.reddit.com/r/swift/comments/4o8atc/xcode_8_which_swift/d4anpet

Xcode 8 verwendet standardmäßig Swift 3.0. Sie können Swift 2.3 jedoch aktivieren. Gehen Sie zu den Build-Einstellungen des Projekts und setzen Sie 'Use Legacy Swift Language Version' auf YES.

Guter alter Reddit :)


1
Ich kann dies nicht finden, indem ich nach "Legacy Swift Language Version verwenden" oder "Legacy"
JerryZhou

Ich verwende die neueste Xcode-Version 8.3.2 (8E2002) und Swift 3 dort in der Swift-Sprachversion. Jetzt möchte ich dies auf Swift 2.3 ändern, aber es gibt nur eine Option Swift 3.0 und die zweite ist nicht spezifiziert. Würden Sie bitte anleiten, wie dies möglich wäre? um schnell 2.3 in meinem aktuellen Projekt zu bekommen? @alexisSchreier
Arsal

14

Geben Sie Folgendes ein, um die auf Ihrem Computer installierte Standardversion von swift über die Befehlszeile anzuzeigen:

swift --version

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

Ziel: x86_64-apple-darwin17.6.0

Dies ist höchstwahrscheinlich die Version, die in der von Ihnen installierten App Store-Version von Xcode enthalten ist (es sei denn, Sie haben sie geändert).

Wenn Sie die tatsächliche Version von Swift ermitteln möchten, die von einer bestimmten Version von Xcode (z. B. einer Beta) verwendet wird, rufen Sie über die Befehlszeile die Swift-Binärdatei im Xcode-Bundle auf und übergeben Sie ihr den Parameter --version

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

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

Ziel: x86_64-apple-darwin17.6.0



1

Ich verwende Swift von Google Colab. So überprüfen Sie es in Colab.

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

Das Ergebnis ist 5.0-dev


-1

Bonusbeitrag: Ich verwende ein benutzerdefiniertes node.js-Skript, um eine saubere Zeichenfolge für die Verwendung mit der Jazzy-Dokumentation zu extrahieren. Sie könnten davon Gebrauch machen, wenn Sie einen Ort finden, an dem Sie es in Ihren Entwicklungsprozess einarbeiten können:

Aus einem Bash-Skript aufgerufen:

#!/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

Sie können natürlich auch Regex verwenden, aber machen Sie, was Sie wollen:]


-1

Wenn Sie einfach den Befehl swift in das Terminal eingeben, wird die Version angezeigt, während Sie sich bei der Swift-Konsole anmelden (so etwas wie unten).

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. Wählen Sie Ihr Projekt aus
  2. Build-Einstellung
  3. Suche nach "schnelle Sprache"
  4. Jetzt können Sie sehen, welche schnelle Version Sie in Ihrem Projekt verwenden

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


Wie unterscheidet sich das von der ersten Lösung in stackoverflow.com/a/46080904/1187415 ?
Martin R

Nun, ich werde das Hauptprojektverzeichnis werfen und wenn Sie "schnelle Sprache" eingeben, wird nur die schnelle Version oben in den Build-Einstellungen angezeigt. Nichts anderes als das.
virale goti

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.