Xcode 10 Playgrounds中的更改变量初始化更改了吗? Xcode 10 Playgrounds是解释器吗?

时间:2018-07-16 13:23:48

标签: xcode read-eval-print-loop swift-playground

我注意到Xcode 10中的Playgrounds不再允许使用已声明但未初始化的变量。例如: 尽管此代码可以在Xcode 9游乐场中使用,但在Xcode 10游乐场中(至少在Beta 1中有效),它会崩溃:

var myValue: Int
//...
myValue = 100

print (myValue)

// Xcode 9 prints 100
// Xcode 10 reports an error: variables currently must have an initial value when entered at the top level of the REPL
  1. 这是新行为还是仅仅是当前Xcode 10 Beta中的错误?

  2. 我曾经将早期的Xcode Playgrounds称为解释器,但是仍然有人会认为Xcode 10 Playgrounds是解释器吗(这始终是正确的)吗?苹果将​​装订线中的“运行”按钮称为“编译”代码。

谢谢!

2 个答案:

答案 0 :(得分:8)

我遇到了这个错误。我有两个不同的游乐场,一个有错误,一个没有。问题是没有为我的游乐场设置“自动运行”。要设置选项,请单击操场上调试窗口顶部的播放箭头,然后您将看到“自动运行”选项,然后选择它。

必须是“自动运行”模式更像是运行整个程序,而不是手动运行。

答案 1 :(得分:3)

1)如果您不初始化让我们声明的常量,则现在出现的错误从Xcode 10开始是新的,但仅在Swift REPL或Playground中,如果您编译代码,则不会出现此错误(见下文)。

2)Swift Playgrounds REPL(Read-Eval-Print-Loop)和解释器几乎相同,但不完全相同。 REPL是一个交互式文本编辑器,可读取您的代码语句,执行它们并打印结果,并在您编辑文本时循环执行。在Playground中进行编辑时,Xcode一次又一次地重新执行编辑器中的所有代码,一次执行一行,就好像您是第一次键入每一行一样。这与解释器的不同之处仅在于解释器通常从输入文件中读取代码,一次解释并执行一行代码,而不是在执行开始之前先将其全部编译并链接到机器代码。