Детская площадка:
ошибка: переменные в настоящее время должны иметь начальное значение при вводе на верхнем уровне 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
, которой должно быть присвоено явное значение.
Но когда он обнаруживает, что нет операции присваивания, он выдает ошибку времени компиляции.
Решения:
Явное назначение
var vb: Float = 12.13 //initializes with an explicit value
print(vb)
Объявить как Implicitly Unwrapped Optional
с !
var vb: Float! //initializes as nil
vb = 12.13
print(vb)
Объявить как Optional
с ?
var vb: Float? //initializes as nil
vb = 12.13
print(vb)
Оберните это в функцию:
func doSomething() {
var vb: Float
vb = 12.13
print(vb)
}
doSomething()
ПРИМЕЧАНИЕ. Этот ответ относится только к объектам верхнего уровня в цикле чтения-печати (REPL)