Come vedo quale versione di Swift sto usando?


568

Ho appena creato un nuovo progetto Swift in Xcode. Mi chiedo quale versione di Swift stia utilizzando.

Come posso vedere, in Xcode o nel terminale, quale versione di Swift sto usando nel mio progetto?


7
Oltre al titolo di stackoverflow.com/questions/29140476/… non trovo alcuna somiglianza con questa domanda che sia sufficiente per etichettare questa domanda in quanto duplicata . L'essenza di questa domanda non è come trovare la versione di Swift a livello di codice , ma come trovare la versione di Swift in un generale modo (tramite terminale o Xcode o, ecc). Questa è una grande differenza.
David Snabel,

Risposte:


407

Le impostazioni di compilazione del progetto hanno un blocco "Swift Compiler - Languages", che memorizza le informazioni su Swift Language Version in formato chiave-valore. Ti mostrerà tutte le versioni disponibili (supportate) di Swift Language per il tuo Xcode e la versione attiva anche con un segno di spunta.

Progetto ► (Seleziona il tuo obiettivo di progetto) ► Costruisci impostazioni ► (Digita 'swift_version' nella barra di ricerca) Lingua del compilatore Swift ► Versione della lingua Swift ► Fai clic sull'elenco Lingua per aprirlo (e ci sarà un segno di spunta su uno qualsiasi dell'elenco -item, che sarà l'attuale versione rapida).

Guarda questa istantanea, per una facile comprensione:

xcode con le aree descritte evidenziate


Con l'aiuto del seguente codice, a livello di codice è possibile trovare la versione Swift supportata dal progetto.

#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

Ecco il risultato usando Playground (con Xcode 11.x )

inserisci qui la descrizione dell'immagine


10
Penso che questa sia la risposta corretta. Più facile che chiamare terminale. (specialmente se hai installato una versione diversa di Xcode)
Mike Keskinov,

17
Questa è la risposta corretta perché la versione rapida è configurata in base alla destinazione.
Andrew Paul Simmons,

2
Non vedo questa proposta nel mio progetto con Xcode 8.1
logoff

6
puoi vedere questa proprietà nelle ultime versioni di xcode
Parkhya Dev,

1
@JonMcClung - La stessa opzione è disponibile anche in Xcode 10.1. L'ho appena controllato.
Krunal,

500

Quello che faccio è dire nel Terminale:

$ xcrun swift -version

L'output per Xcode 6.3.2 è:

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

Ovviamente ciò presuppone che tu xcrunstia indicando correttamente la tua copia di Xcode. Se, come me, stai manipolando diverse versioni di Xcode, questo può essere un problema! Per assicurarsi che lo sia, diciamo

$ xcrun --find swift

e guarda il percorso di Xcode che ti mostra. Per esempio:

/Applications/Xcode.app/...

Se questo è il tuo Xcode, l'output da -versionè accurato. Se è necessario eseguire il repoint xcrun, utilizzare il menu a comparsa Strumenti della riga di comando nel riquadro delle preferenze Posizioni di Xcode.


8
Puoi anche usare xcode-select -pper stampare il percorso dell'Xcode che userà xcrun e sudo xcode-select -s /path/to/Xcode.appper cambiarlo.
Jack Lawrence,

4
Ho appena iniziato a studiare lo sviluppo di iOS e sono sorpreso che xcode non ti permetta di scegliere la versione di swift né di farti conoscere la versione dalla GUI.
Alex,

@RadekWilczak Non so cosa intendi per "dovrebbe essere". Ho appena copiato il comando pubblicato e incollato in Terminal e ho premuto Invio, e funziona. Quindi forse c'è un'altra alternativa, ma quello che ho detto non è sbagliato.
matt

1
Questo mi ha dato la risposta sbagliata. Perché swift è configurato per target. Vedi la risposta di seguito da @Krunal per la migliore risposta.
Andrew Paul Simmons,

Sono d'accordo con tutto il "modo corretto di impostare SWIFT_VERSION" per progetto. Tuttavia, nelle precedenti versioni di Xcode come 8.2, non indica chiaramente nell'interfaccia utente quale versione di XCode è supportata nel progetto e ha solo "Usa versione legacy Swift Language" nell'interfaccia utente con Sì, No, non specificato. L'approccio da riga di comando è estremamente utile per poter interrogare rapidamente la risposta su quale sia la versione massima di swift disponibile.
truedat101,

104

Apri il Terminale e scrivi:

swift -version

12
Questa non è necessariamente la versione di swift che Xcode vede. Inoltre, puoi avere swift senza avere Xcode.
asiby,

64

Da Xcode 8.3 in poi Build Settingsha una chiave Swift Language Versioncon un valore di versione rapida che il tuo target sta usando.

Per i vecchi Xcodes utilizzare questa soluzione, aprire il terminale e digitare i seguenti comandi

Caso 1: hai installato solo un'app Xcode

swift -version

Caso 2: hai installato più app Xcode

  • Passa active developer directory(Sostituisci Xcode_7.3.appdal seguente comando con il nome del file dell'app Xcode dalla directory dell'applicazione per cui desideri verificare la versione rapida)

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

     swift -version

NOTA: da Xcode 8 a Xcode 8.2.x è possibile utilizzare swift 2.3 anche se Xcode 8 utilizza swift 3.x come versione rapida predefinita. Per utilizzare Swift 2.3 , basta attivare flag Use Legacy Swift Language Versionper YESda Build Settinge XCode utilizzerà Swift 2.3 per quel target di progetto.


21

Puoi vedere e selezionare quale versione di Swift Xcode sta usando in:

Target -> Impostazioni build -> Versione lingua veloce :

inserisci qui la descrizione dell'immagine

Questo è disponibile in Xcode 8.3 e Xcode 9 (non ho controllato le versioni precedenti)


2
Swift Language Versionnon compare come impostazione nel mio progetto Xcode 8.2.1. Ha Use Legacy Swift Language Version.
Chris Prince,

1
@ChrisPrince Sì, Swift Language Versionnon esisteva qui Build Settingsfino a Xcode 8.3 .... nelle precedenti versioni di Xcode 8.x Use Legacy Swift Language Version, No= Swift 3, e Yes= Swift 2.3
William GP,

17

Questo post reddit mi ha aiutato: https://www.reddit.com/r/swift/comments/4o8atc/xcode_8_which_swift/d4anpet

Xcode 8 utilizza Swift 3.0 come impostazione predefinita. Ma puoi attivare Swift 2.3. Vai a Impostazioni di costruzione del progetto e imposta 'Usa versione legacy Swift Language' su SÌ.

Buon vecchio reddit :)


1
Non riesco a trovarlo cercando "Utilizza la versione legacy di Swift Language" o "Legacy"
JerryZhou

Sto usando l'ultima versione Xcode 8.3.2 (8E2002) e Swift 3 lì in Swift Language Version. Ora voglio cambiarlo in rapido 2.3 ma c'è solo un'opzione rapido 3.0 e il secondo non è specificato. quindi, per favore, guiderai come questo sarebbe possibile? ottenere rapidamente 2.3 nel mio progetto attuale? @alexisSchreier
Arsal,

15

Per vedere la versione predefinita di swift installata sul tuo computer, quindi dalla riga di comando, digita quanto segue:

swift --version

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

Target: x86_64-apple-darwin17.6.0

Questa è molto probabilmente la versione inclusa nella versione di Xcode dell'app store installata (a meno che non sia stata modificata).

Se si desidera determinare la versione effettiva di Swift utilizzata da una particolare versione di Xcode (una beta, ad esempio), quindi dalla riga di comando, richiamare il binario swift all'interno del bundle Xcode e passargli il parametro --version

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

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

Target: x86_64-apple-darwin17.6.0



1

Sto usando Swift di Google Colab. Ecco come controllarlo in Colab.

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

Il risultato è 5.0-dev


0

Nel caso in cui qualcuno stia cercando una mappatura one-to-one rapida della versione Swift basata sulla versione Xcode:

Xcode 11.5  :       Swift version 5.2.4

Xcode 11.4  :       Swift version 5.2

Xcode 11.3  :       Swift version 5.1.3

Xcode 11.2.1:       Swift version 5.1.2

Ottenuto eseguendo il comando seguente, come indicato nelle diverse versioni di Xcode:

/Applications/Xcode11.5.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift --version

-1

Contributo bonus: sto usando uno script node.js personalizzato per estrarre una stringa pulita da usare con la documentazione Jazzy. Potresti ottenere un po 'di questo se riesci a trovare un posto dove lavorarlo nel tuo processo di sviluppo:

Richiamato da uno script 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

Puoi anche usare regex ovviamente, ma fai quello che vuoi:]


-1

Inserendo semplicemente il comando swift nel terminale, mostrerà la versione, mentre si accede alla console 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. Seleziona il tuo progetto
  2. Build Setting
  3. cerca "lingua veloce"
  4. ora puoi vedere quale versione rapida stai usando nel tuo progetto

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


In che modo differisce dalla prima soluzione fornita in stackoverflow.com/a/46080904/1187415 ?
Martin R,

beh vado a lanciare la directory principale del progetto e quando si digita "linguaggio rapido", mostra solo la versione rapida in cima a Impostazioni di costruzione nient'altro che quello ...
Goti virale

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.