zoukankan      html  css  js  c++  java
  • Swift REPL入门介绍

    Xcode 6.1 引入了一个新特性用来辅助Swift开发,即Read Eval Print Loop(“读取-求值-输出”循环,简称REPL)。熟悉解释型语言的开发者将会对这个命令行环境感到舒适,而有经验的开发者也能在其中发现一些有用的 功能。要开始使用它,打开OS X Yosemite的终端应用,并输入swift。如果系统版本是OS X Mavericks,你需要输入xcrun swift,然后Swift REPL就启动了。

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

    你需要做的就是在光标处输入Swift语句,REPL将会立刻执行你的代码。表达式的结果将自动的格式化,并和输入的变量以及常量一起显示。控制台的输出流将自然的嵌入到互动会话中:

    1
    2
    3
    4
    5
    6
      1> "100".toInt()
    $R0: Int? = 100
      2> let name = "Katherine"
    name: String = "Katherine"
      3> println("Hello, (name)")
    Hello, Katherine

    注意第一行命令的结果被REPL添加了一个名称,即使表达式并没有明确的分配名称。你能在随后的语句中使用这些变量名称来重用它们:

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

    Swift编译器还能识别未完成的代码,并且会在需要时提示补全代码。甚至代码能自动的缩进,就跟在Xcode里一样。比如,输入一个函数:

    1
    2
    5> func timesTwo() {
    6.      ▌

    接下来的行的提示会显示行号和一个点,而不是用来指示新语句的尖括号。所以你一眼就能看出代码是否需要补全。在这里你能输入方法中剩下的代码:

    1
    2
    3
    5> func timesTwo() {
    6.      return value * 2
    7. }▌

    这里有3个值得注意的地方:首先,上面的第六行是自动缩进的,但REPL会在我们输入结束的花括号时自动结束缩进。其次,上面的函数引用了一个参数,但我们忘记事先声明它了,并且函数还需要一个返回类型。最后,即使你已经在最后一行回车了,你仍然可以很方便的修改它们。

    多行历史记录

    当代码被提交到编译器,它同时也被储存在REPL的历史记录里面,因此修改错误将会非常简单。如果你在上面未完成的函数最后敲下回车,你会获得一条错误信息:

    1
    error: use of unresolved identifier 'value'

    和其他大多数历史记录的实现一样,你能按下向上的箭头“↑”来调出历史输入。在这里REPL将会调出整个三行输入,并将光标置于最后。现在你能够编辑代码来改正输入错误了。

    你的输入的历史记录将会保存在会话中,并且能够记录数百条代码片段。在空行按向上键则会调出较早的历史输入,按向下键则会调出较近的历史输入。

    多行编辑

    即使REPL的表现像是传统的命令行编辑器,它还能提供方便的功能来处理多行输入,比如大多数类和函数声明。在上面例子里,你可以用方向键在行间移动,来快速定位需要修改的地方:

    1
    2
    3
    5> func timesTwo(▌){
    6.      return value * 2
    7. }

    然后你可以添加参数声明以及返回类型:

    1
    2
    3
    5> func timesTwo(value: Int) -> Int▌{
    6.        return value * 2
    7. }

    在当前光标处按下回车不会提交函数而是会插入新行,你需要将光标移到函数的末尾按下回车,函数就能够使用了:

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

    自动探测语句的结束点意味着你能够自由的输入代码,REPL在绝大多数情况下都能正确处理你的输入。不过意外情况也是存在的,当函数有共同依赖时,需要一次提交多个声明,比如下面的代码:

    1
    2
    3
    4
    5
    6
    func foo() {
         bar()
    }
    func bar() {
         foo()
    }

    如果你一行一行的输入上面的代码,到第三行结束时编译器就会编译第一个函数,因此将导致错误:

    1
    error: use of unresolved identifier 'bar'

    一个解决办法是,在同一行里输入多个函数,这样就能绕过自动探测结束点,不过还有更好的解决方案。在输入完第三行后,你能按向下键“↓”来手动增加 一行,这样你就能像平常一样输入剩下的代码了。两个函数声明将被一起编译,达到互递归(mutual recursion)的目的。

    快速指南

    为帮助你上手REPL,下面列出一些经常被使用的编辑和导航组合键:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Arrow Keys        Move cursor left/right/up/down
    Control+F        Move cursor right one character, same as right arrow
    Control+B        Move cursor left one character, same as left arrow
    Control+N        Move cursor to end of next line, same as down arrow
    Control+P        Move cursor to end of prior line, same as up arrow
    Control+D        Delete the character under the cursor
    Option+Left        Move cursor to start of prior word
    Option+Right    Move cursor to start of next word
    Control+A        Move cursor to start of current line
    Control+E        Move cursor to end of current line
    Delete            Delete the character to the left of the cursor
    Esc <            Move cursor to start of first line
    Esc >            Move cursor to end of last line

    CocoaChina是全球最大的苹果开发中文社区,官方微信每日定时推送各种精彩的研发教程资源和工具,介绍app推广 营销经验,最新企业招聘和外包信息,以及Cocos引擎、Cocos Studio开发工具包的最新动态及培训信息。关注微信可以第一时间了解最新产品和服务动态,微信在手,天下我有!

    请搜索微信号“CocoaChina”关注我们!

     
  • 相关阅读:
    Unity中将相机截图保存本地后颜色变暗的解决方法
    《无间道》亚索盲僧上演天台对决——开发者日志(二)_为人物添加动画
    《无间道》亚索盲僧上演天台对决——开发者日志(一)_项目启动
    CCF推荐期刊会议列表(2019第五版)——《中国计算机学会推荐国际学术会议和期刊目录》
    用3dMax给lol人物模型制作表情动画并导入Unity
    与100个诺手一起跨年
    C#发邮件
    SQL的各种连接Join详解
    Oracle&SQLServer中实现跨库查询
    SQL SERVER/ORACLE连接查询更简洁方便的方式
  • 原文地址:https://www.cnblogs.com/lingzhao/p/4107890.html
Copyright © 2011-2022 走看看