Answers:
项目构建设置有一个块“ Swift Compiler-Languages”,它以键值格式存储有关Swift语言版本的信息。它将通过一个勾号显示Xcode和活动版本的所有可用(受支持的)Swift语言版本。
项目►(选择项目目标)►构建设置►(在搜索栏中键入'swift_version')Swift编译器语言►Swift语言版本►单击“语言”列表将其打开(列表中的任何一个都会出现一个勾号) -item,它将是当前的快速版本)。
查看此快照,以方便理解:
借助以下代码,您可以以编程方式找到您的项目支持的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)的结果
我在终端中说的是:
$ 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的“位置”首选项窗格中的“命令行工具”弹出菜单。
xcode-select -p
用于打印xcrun将使用的Xcode的路径,并sudo xcode-select -s /path/to/Xcode.app
进行更改。
从Xcode 8.3开始,您的目标所使用的Build Settings
密钥Swift Language Version
的键值为swift版本。
对于较旧的Xcode,请使用此解决方案,打开终端并键入以下命令
情况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,即使Xcode 8使用swift 3.x作为默认的swift版本,您也可以使用swift 2.3。要使用swift 2.3,只需将flag设置Use Legacy Swift Language Version
为YES
from Build Setting
,XCode将使用Swift 2.3作为该项目目标。
Swift Language Version
在我的Xcode 8.2.1项目中没有作为设置出现。它确实有Use Legacy Swift Language Version
。
Swift Language Version
存在,= Swift 3和= Swift 2.3Build Settings
Use Legacy Swift Language Version
No
Yes
这篇reddit帖子对我有帮助:https : //www.reddit.com/r/swift/comments/4o8atc/xcode_8_which_swift/d4anpet
Xcode 8默认使用Swift 3.0。但是您可以打开Swift 2.3。转到项目的“构建设置”,并将“使用旧版Swift语言版本”设置为“是”。
好老reddit :)
要查看计算机上安装的swift的默认版本,然后从命令行输入以下内容:
swift --version
Apple Swift版本4.1.2(swiftlang-902.0.54 clang-902.0.39.2)
目标:x86_64-apple-darwin17.6.0
这很可能是您已安装的Xcode的应用程序商店版本中包含的版本(除非已更改)。
如果要确定特定版本的Xcode(例如beta)正在使用的Swift的实际版本,请从命令行调用Xcode捆绑包中的swift二进制文件,并将参数--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
/usr/bin/swiftc --version
额外的贡献:我正在使用自定义的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
当然,您也可以使用正则表达式,但是可以做任何您想做的事情:]