我该如何在终端中使用Swift?

111
我阅读了Xcode 6的新功能文章,该文章介绍了关于Xcode 6的一些新特性,其中提到:

命令行

Xcode的调试器包括Swift语言的交互式版本,称为REPL(Read-Eval-Print-Loop)。使用Swift语法来评估和与正在运行的应用程序进行交互或在类似脚本的环境中编写新代码。REPL可以从Xcode控制台中的LLDB或从终端中访问。

我想知道如何获取REPL?


3
这是我写的一篇关于此事的文章。https://medium.com/swift-programming/1-learn-swift-by-running-scripts-73fdf8507f4b - Santosh
14个回答

136
sudo xcode-select -switch /Applications/Xcode.app/Contents/Developer

然后你可以选择以下其中之一:

xcrun swift 
lldb --repl

从 Xcode 6.1 开始,在终端中键入 swift 也会启动 REPL。


3
要退出,请输入Ctrl+d - arve0

56

或者,如果你不想破坏你现有的开发环境,你可以运行:

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

31
甚至可以更进一步,将以下内容添加到您的 ~/.bash_profile 文件中:alias swift="/Applications/Xcode6-Beta.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift" - David Beck
6
要使用OS X SDK,您需要指定其路径:/Applications/Xcode6-Beta.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift -sdk /Applications/Xcode6-Beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk - Linus Unnebäck
感谢你的建议,David。我已经将它添加到个人资料中,但是我一直收到“没有这样的文件或目录”的提示,尽管它就在那里,并且权限为-rwxr-xr-x@ 1 mark2 admin 33557440 31 May 14:43 swift。我对单元测试不是很熟悉,有人能看出问题在哪里吗? - MarkAurelius
使用 xcrun --find swift 获取路径将更具有未来性。 - Mike Weller
1
xcrun --toolchain com.apple.dt.toolchain.Swift_2_3 swift 更好。原始答案在这里:https://dev59.com/C2Ag5IYBdhLWcg3wE3jQ#36254848 - Puttin

45

步骤1:打开终端
步骤2:输入"swift"
步骤3:没有第三步

示例:

GoldCoast:~ macmark$ swift
Welcome to Swift!  Type :help for assistance.
  1> println("Hello, world")
Hello, world
  2> var myVariable = 42
myVariable: Int = 42
  3> myVariable = 50
  4> let myConstant = 42
myConstant: Int = 42
  5> println(myVariable)
50
  6> let label = "The width is "
label: String = "The width is "
  7> let width = 94
width: Int = 94
  8> let widthLabel = label + String(width)
widthLabel: String = "The width is 94"
  9> :exit

GoldCoast:~ macmark$ 

虽然您仍然可以继续使用“xcrun swift”,但从Swift 2.1开始,您可以直接从命令行运行“swift”。 - timbo
我的例子来自于2014年7月的Swift 1.0版本。对我来说,它一直可以在没有xcrun的情况下正常工作。 - MacMark
1
现在你需要输入 swift repl - undefined

20
在安装了命令行工具的 Xcode 6.1.1 中,您可以通过以下方式直接引用/usr/bin/swift来执行脚本:

在Xcode 6.1.1中安装命令行工具后,您可以通过直接引用/usr/bin/swift来执行脚本:

#!/usr/bin/swift

let variable: String = "string"
print("Test \(variable)")

请确认此代码可在Swift 2.1.1(Xcode 7.2安装)中正常运行。 - thibaut noah
1
任何想在Xcode 8中使用Swift 2.3的人都不应错过https://dev59.com/C2Ag5IYBdhLWcg3wE3jQ#36254848。 - Puttin
这个非常好用,可以很好地将Swift与Bash Shell脚本集成。只需要记得在文件上执行chmod +x命令,就可以通过./myswiftscript.swift从任何地方执行Swift脚本了。 - johnrpenner

15

与从终端中运行Swift相同的方式,您也可以执行脚本。 只需使用以下shebang,并运行您的脚本。(根据Swift创始人Chris Lattner的说法)

#!/usr/bin/env xcrun swift -i

6
根据XCode 6 Beta 5的说明,-i标志已被移除并且会导致错误。放弃使用该标志,改用#!/usr/bin/env xcrun swift代替。 - Jeehut
任何想在Xcode 8中使用Swift 2.3进行编程的人,都不应错过https://dev59.com/C2Ag5IYBdhLWcg3wE3jQ#36254848 - Puttin

10

如果有人需要一个简单的 Swift 脚本 shebang:

#!/usr/bin/env xcrun --sdk macosx swift
如果需要特定的目标版本。
#!/usr/bin/env xcrun --sdk macosx swift -target x86_64-macosx10.11
如果需要使用特定的工具链(例如您想使用Swift 2.3,但您正在使用Xcode 8),
#!/usr/bin/env xcrun --toolchain com.apple.dt.toolchain.Swift_2_3 --sdk macosx swift -target x86_64-macosx10.11
如果您想在 Xcode 7.3.1 中使用 Swift 2.2,请假定 Xcode 7.3.1 位于 /Applications/Xcode7.app
sudo xcode-select -s /Applications/Xcode7.app/
xcrun --sdk macosx swift

从现在开始,默认的活跃开发者目录已更改,您可以使用以下命令进行检查:

xcode-select -p
如果您想使用由Swift.org提供的快照,请务必不要错过这里的安装说明

正如我在“Run swift script from Xcode iOS project as build phase”中所回答的那样。


8

**截止到xcode6 beta 4的更新**

这也可以在xcode偏好设置中完成。只需转到xcode -> 偏好设置 -> 位置。

对于命令行工具,只需从下拉列表选项中选择您想要的版本,参见下图。(Swift需要路径为xcode6的路径)。

command line tools screen

我也将保留我的先前答案。


Kaan所说的方法已经可以使用,你也可以使用Apple脚本制作一个简单的应用程序,这样你就可以轻松地切换回默认路径或beta路径(以使用Swift)。

打开Apple脚本>粘贴以下代码并将其导出为应用程序,这样您只需单击一下即可切换到默认路径或beta路径。

set xcode6Path to "xcode-select -switch /Applications/Xcode6-Beta.app/Contents/Developer"
set xcodeDefaultPath to "xcode-select -switch /Applications/Xcode.app/Contents/Developer"

display dialog "set xcode sdk path to " buttons {"xcode 6", "default"} default button 1
copy result as list to {buttonPressed}
if buttonPressed is "default" then
    try
        do shell script xcodeDefaultPath with administrator privileges
    end try
else
    try
        do shell script xcode6Path with administrator privileges
    end try
end if

然后运行 > xcrun swift

免责声明

  1. 该脚本假定您已经安装了xcode6-beta和xcode5。
  2. 如果您是一个新的开发者,只使用xcode6beta,则不需要任何脚本或手动设置路径。只需运行xcrun swift,因为路径已经为您设置好了。
  3. 当xcode6最终发布时,您将需要从此简单应用程序重置您的路径回到默认,并永远不再使用它。

我之前安装了XCode 5,现在已经“更新”(替换)为XCode 6。现在有没有办法重新安装5.x版本?这个问题有解决方案吗? - Matthias Max
你的意思是“重新回到5.x”?Xcode6 GM版或App Store发布将取代Xcode5。 - nsuinteger

6
安装完官方版本的Xcode 6.1后,在/usr/bin/swift中有一个swift命令。
请注意,如果您的Python路径与Apple提供的Python不同,则swift可能会出现错误,错误信息为ImportError: No module named site。在这种情况下,请确保在调用swift之前执行export PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/sbin

5

xcrun命令将使用DEVELOPER_DIR环境变量来覆盖当前选择的Xcode安装(如xcode-select所设置)。您可以使用它来构建一个单一的命令,该命令将在命令行上运行swift并将您置于REPL中。命令如下:

/usr/bin/env DEVELOPER_DIR=/Applications/Xcode6-Beta.app/Contents/Developer xcrun swift 

你可以将它别名为'swift':

alias swift="/usr/bin/env DEVELOPER_DIR=/Applications/Xcode6-Beta.app/Contents/Developer xcrun swift"

有趣的是,你可以通过添加-i参数来运行Swift脚本,就像使用Bash或Python一样:

#!/usr/bin/env DEVELOPER_DIR=/Applications/Xcode6-Beta.app/Contents/Developer xcrun swift -i

println("Hello World!")

当然,一旦Xcode 6正式发布并将其作为您的默认开发工具,您可以删除DEVELOPER_DIR = ..部分,只需使用“xcrun swift”。

4

请确保安装的是xcode 6.0而不是6.1

如果出现错误:

<unknown>:0: error: the SDK 'MacOSX10.9.sdk' does not support Swift

只需运行

xcrun --sdk iphonesimulator8.0 swift

或者您可以。
export SDKROOT="iphonesimulator8.0" 

然后

xcrun swift

使用"xcodebuild -showsdks"来列出可用的 SDK 名称。

如果您安装了xcode 6.1,只需执行以下操作:

sudo xcode-select -s /Applications/*your-Xcode-6.1-path.app*/Contents/Developer
xcrun swift

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接