Swift REPL简介

原文链接:https://developer.apple.com/swift/blog/?id=18

Xcode 6.1引入了另外一种以交互式的方式来体验Swift的方法:Read Eval PrintLoop,简称REPL。那些对解释型语言比较熟悉的开发者会对这个命令行的环境感到很惬意,更有经验的开发者会发现很多新奇的特性。闲话少说,言归正传。要想使用REPL,请先启动Terminal.app(该程序在/Applications/Utilities下面),如果你使用的OS X Yosemite系统,那么请在窗口中输入“swift”,如果你使用的是OS X Mavericks系统,那么请在窗口中输入“xcrun swift”。输入完成之后,我们就进入了Swift REPL环境之中:

Welcome to Swift version 1.1(swift-600.0.20.0). Type :help for assistance.
1>

进入环境之后,你需要做的就是输入Swift语句,REPL会马上执行输入的代码。REPL系统会自动组装表达式的结果,并将结果与输入的语句一起展示出来。控制台以交互式会话的方式来展示结果:

1>”100”.toInt()
$R0: Int? = 100
2> let name =”Katherine”
name: String =”Katherine”
3>print(“Hello, (name)”)
Hello, Katherine

注意,虽然并没有明确地将第一行表达式的结果值赋给一个变量,但REPL还是为结果起了一个名字($R0)。你可以在后面的语句中通过这个名字使用它所代表的结果值:

4> $R0! + 200
$R1: Int = 300

Swift编译器可以识别未输入完整的代码,并在需要的时候提示你要输入完全。你的代码甚至会像在Xcode里面那样自动缩进。比如,编写一个函数:

5> functimesTwo() {
6.

后续行的提示是一个后面紧跟句号的行号,而非提示一条新语句的尖括号。通过这个提示,你一眼就能看出自己还需要完成一个代码段。因此,你可以在还未完成的函数中继续输入剩下的代码:

5> functimesTwo() {
6.     return value * 2
7. } 

有三个需要注意的地方:第一,上面的第六行代码在最开始的时候是缩进了的,但REPL在我们输入了函数结束符(})之后自动取消了缩进;第二,这个函数引用了一个我们忘记声明的变量(value),并且函数还缺少了返回类型,因此,你需要将这两个bug修复掉;第三,修复代码问题永远都不晚,即使你已经完成了整个函数的编写。

多行历史记录(Multi-Line History)
当代码被提交到编译器的时候,它也同时被记录在了REPL历史中,这使得修正错误不再重要。如果你在未编写完整的函数(就像上面的函数)的最后按下了回车键,那么此时你会看到如下提示信息:

error:use of unresolved identifier ‘value’

就像很多系统(译者注:如Linux)中已经实现的那样,你可以通过在终端上使用向上箭头来调用最近几次所输入的命令。REPL会将上面例子中的三行代码完全找回,并且将光标放在最后面。现在,你可以继续编写代码来修改之前犯下的错误。

REPL能够在会话之间保存成百上千的代码段的历史。每次你按下向上箭头键的时候,终端上就会出现你更早一次所输入的命令。每次按下向下箭头键的时候,终端上就会出现你更近一次所输入的命令。就像我们在下面讨论的那样,在出现下一条具体的命令之前的空行会显得非常的实用。

多行编辑(Multi-Line Editing)
虽然REPL的行为有点像传统的行编辑器,但它仍然为处理像很多类或者函数声明那样的多行输入提供了非常方便的特性。如上面的例子所示,在最后一行按下回车键之前,你可以使用向上箭头来将光标移动到声明行,然后使用向左箭头来将光标移动到左括号(()之后以完善参数列表:

5> functimesTwo() {
6.     return value * 2
7. }

输入参数声明,之后使用向右的箭头来将光标移动到右括号())之后并添加返回值类型:

5> functimesTwo(value: Int) -> Int {
6.     return value * 2
7. }

这个时候,你不能按下回车键以完成函数声明,因为光标还在代码块的中间。如果在这里按下回车键,就会插入一个换行符。如果你试图在一个函数或方法体中插入多余的行,那么这个换行符就会发挥作用,但是在这里你只是想转到函数声明的最后去。你可以快速地按向下箭头两次来实现你的愿望,或者使用Emacs序列ESC >(escape键后跟一个尖括号)。在最后面一行的末尾按下回车键会编译刚声明的函数,现在这个函数就可以被调用了:

8> timesTwo(21)
$R2: (Int) = 42

表达式完成状态的自动检测意味着在大多数时候你可以只是输入代码而REPL会帮你将语句补充完整。然而,有些时候,因为语句之间的相互依赖性,同时提交多个声明是很有必要的。请看下面的代码:

func foo() {
    bar()
}
func bar() {
    foo()
}

如果一行一行地输入上面的代码,会导致当第三行代码写完的时候编译第一个函数的代码,这也会导致如下报错:

error:use of unresolved identifier ‘bar’

你可以在同一行代码中声明两个函数来规避当你按下回车键所发生的自动完成检测。但是,还有更好的方法。当完成了上面的前三行的输入之后,你可以按向下箭头来手动生成第四行,然后正常输入剩下的代码。这两个函数在一起被编译,这样就达到了互递归(两个函数相互调用)的目的。

快速入门(Quick Reference)
为了让大家快速迈出第一步,这里提供一个最常使用的编辑和导航的快捷键列表:

箭头键                   将光标向左/右/上/下移动

Control+F               将光标向右移动一个字符

Control+B               将光标向左移动一个字符

Control+N               将光标移动到下一行

Control+P               将光标移动到上一行

Control+D               删除被光标选中的字符

Option+Left             将光标移动到前一个单词的开始处

Option+Right            将光标移动到下一个单词的开始处

Control+A               将光标移动到当前行的开始处

Control+E               将光标移动到当前行的结束处

Delete                  删除光标左边的字符

Esc <                   将光标移动到第一行的开始处

Esc >                   将光标移动到最后一行的结束处
时间: 2024-12-20 13:38:10

Swift REPL简介的相关文章

苹果公司编程语言Swift语言简介_Swift

Swift 是一门新的编程语言,用于编写 iOS 和 OS X 应用程序.Swift 结合了 C 和 Objective-C 的优点并且不受C兼容性的限制.Swift 使用安全的编程模式并添加了很多新特性,这将使编程更简单,扩展性更强,也更有趣.Swift 支持 Cocoa 和 Cocoa Touch 框架. Swift 的开发从很久之前就开始了.为了给 Swift 打好基础,苹果公司改进了编译器,调试器和框架结构,让 Swift 使用自动引用计数(Automatic Reference Cou

《Swift入门经典(第2版)》——导读

前言 在Apple公司于2014年6月召开的年度全球开发者大会(World Wide Developer Conference,WWDC)上,Apple公司公布了一种名为Swift的新编程语言,该公司从2010年起就在开发这种语言.这是一个重大的公告.多年来,在开发大多数Mac和iOS应用时,人们主要选择的语言是Objective-C.可以明显感觉到人们对Swift编程语言的殷切期盼.Twitter上关于Swift的言论不绝于耳,人们纷纷购买标题中具有Swift的域名,并且在公告后24小时内,A

Swift学习资源

Swift,一种强大的开源编程语言, 让大家都能开发出众的 App. Swift 是一种强劲而直观的编程语言,它由 Apple 创造,可用来为 iOS.Mac.Apple TV 和 Apple Watch 开发 app.它旨在为开发者提供充分的自由.Swift 易用并且开源,只要有想法,谁都可以创造非凡. Swift is a high-performance system programming language. It has a clean and modern syntax, offer

Swift中文教程(七)协议、扩展和泛型

Protocols and Extensions 协议(接口)和扩展 Swift使用关键字protocol声明一个协议(接口): 类(classes),枚举(enumerations)和结构(structs)都可采用协议(protocol): class SimpleClass: ExampleProtocol { var simpleDescription: String = "A very simple class." var anotherProperty: Int = 6910

《Swift入门经典(第2版)》——1.2 起步

1.2 起步 此时,最重要的假设是你已经具有一台Mac计算机,如果没有它,将不能安装Xcode,它是Apple的Mac和iOS集成开发环境(Integrated Development Environment,IDE). 注意:下载Xcode Xcode 7是从Mac App Store免费下载的,必须具有Mac OS X 10.10.4或更高版本.尽管可以在Xcode 6.x中编写Swift代码,但是本书还将包括Swift版本2.0,它需要Xcode 7. 在Mac上启动App Store应用

《Swift入门经典(第2版)》——2.2 Swift中的变量

2.2 Swift中的变量 可以看到,由于应用具有并且必须具有动态性,只使用常量将无法实现复杂的应用.Swift提供了一种同样简单的方式,像声明常量那样声明变量,只是使用var导引符.顾名思义,变量可以改变,它们本质上是可变(mutable)的.这意味着无论何时使用"="运算符(称为赋值运算符(assignment operator)),都可以改变变量的值(第3章将讨论运算符). 当你知道数据可以并且将会改变时,变量将特别有用.例如,如果你正在构建一个计步器应用,你知道对于你或者你的应

Swift 在对 Objective-C 改进的 6 个方面 【已翻译100%】

在 Atomic Object 的安娜堡办公室,我们做了一个观看2014年的WWDC主题演讲,毫不夸张地说,当Swift宣布的时候,我们感到十分激动.Swift,苹果正在推进的一个更现代的编程语言.我很高兴能获得先机并开始用它开发. 在这篇博文中,我将重点介绍Swift的几个语言特性,这将使开发者的工作更加轻松. Objective-C语言的问题 当一个开发者申请一个关于Atomic Object的新职位时,我们会给他填写一个(GTKY) Getting To Know You的表.这个表要求填

《Swift入门经典(第2版)》——1.5 作业

1.5 作业 作业包含测验问题和练习,可以帮助你巩固对所学知识的理解.要尝试先解答所有的问题,然后再查看随后一节中的答案. 1.5.1 测验 1.可以使用什么命令打开Swift REPL? 2.使用playground编写Swift代码,把数字3和19相乘,并把值存储在一个名为result的常量中.这段代码是什么? 3.怎样退出Swift REPL? 4.运行Xcode 7的Mac OS X的最低版本是什么? 5.下面的Swift代码的输出将是什么? let age = 33 let outpu

《Swift入门经典(第2版)》——第2章 学习Swift的基本数据类型 2.1Swift中的常量

第2章 学习Swift的基本数据类型 在本章中你将学到: 了解常量与变量之间的区别: 怎样声明和使用常量与变量: Swift怎样使用类型推断,实现自动类型设置: Swift的常用数据类型: 怎样利用类型注释特别声明数据类型. 第1章介绍了设置Xcode和Swift REPL环境,并且展示了Xcode布局.我们还研究了Swift代码的一些简短示例,说明了怎样使用这些环境来帮助你编码,甚至测试你的代码.在代码中声明常量以及把不同的数据类型(比如数字42或字符串"Hello, playground&q