错误是:在REPL的顶层输入时,变量当前必须具有初始值

时间:2019-01-06 07:13:27

标签: ios swift swift-playground

var vb:Float
vb = 12.13
print(vb)

产生以下错误:

  

错误:在REPL的顶层输入变量时,当前变量必须具有初始值

2 个答案:

答案 0 :(得分:1)

这是一个奇怪的问题,我知道 当游乐场设置为手动运行时,会发生这种情况 为了避免此问题,您必须将游乐场设置为从手动运行到 自动运行。

  • 按住控制台顶部的小三角形,将弹出选项
  • 第2步:现在选择从那里自动运行

就这样!!!!!!

答案 1 :(得分:1)

游乐场:

  

错误:在REPL的顶层输入变量时,当前变量必须具有初始值

这表示直接在运动场中声明的变量尚未在声明的同时初始化。

像这样在顶层声明的变量将在声明期间初始化,或者至少在init中初始化,但是由于游乐场没有init,因此需要预先初始化。

所以:

var vb: Float //error: variables currently must have an initial value when entered at the top level of the REPL
vb = 12.13
print(vb)

等效于:

class Playground {        
    var vb: Float

    init() {} //Error: Return from initializer without initializing all stored properties

    func main() {
        vb = 12.13
        print(vb)
    }        
}

顶级对象是直接在操场上编写的对象,即不在函数/类/结构内部,因此它们被视为显式初始化的属性。

因此,var vb: Float向编译器指示它是类型为vb的名为Float的变量,应为其分配一个明确的值。
但是,当发现没有赋值操作时,它将引发编译时错误。


解决方案:

  1. 显式分配

    var vb: Float = 12.13 //initializes with an explicit value
    print(vb)
    
  2. Implicitly Unwrapped Optional声明为!

    var vb: Float! //initializes as nil
    vb = 12.13
    print(vb)
    
  3. Optional声明为?

    var vb: Float? //initializes as nil
    vb = 12.13
    print(vb)
    
  4. 将其包装在函数中

    func doSomething() {
        var vb: Float
        vb = 12.13
        print(vb)
    }
    
    doSomething()
    

注意:此答案特定于Read-Eval-Print-Loop(REPL)中的顶级对象