Ошибка если объявить пустую переменную

swift4

#1

Объявляю пустую переменную в Playground (xcode10 beta):
var numDouble: Double

но выдает ошибку:

variables currently must have an initial value when entered at the top level of the REPL

Как мне объявлять пустые переменные без такой ошибки?


Помощь новичку Xcode Swift
#2

Попробуйте ее сделать опциональной

var numDouble: Double?

#3

Спасибо, это какое-то нововведение в xcode? Потмоу что не увидел в учебных курсах описание такой ошибки, везде используют объявление без указания “?”


#4

https://kyouko-taiga.github.io/swift-thoughts/tutorial/chapter-1/
Optionals
Swift requires to initialize all variables (or constants) with a value, because it does not allow them to be nil by default. Allowing everywhere the null pointer is a bad programming practice, as it creates easily errors.

Instead, Swift provide optional types to explicitly state what can be null. An optional type denotes a value that may be present or not. It is specified by appending the operator ? to any type. The original type is wrapped with the possibility of the nil value:

In the following example, since no value is provided for x, the language automatically creates an initialization with the special nil value, that denotes the absence of a value. It is also possible to assign nil manually. Values can be assigned to optionals the same way they would have been assigned to the original type.


#5

Это совсем не нововведение, просто Вы наверняка видели примеры либо в классах, либо в структурах, которые так или иначе инициализируются методом init, но в playground, если Вы создаете переменные, то они должны иметь значения, если они не являются опционалами.


#6

Спасибо за пояснение!


#7

а что за REPL у Вас в сообщении об ошибке? Какое окружение у вашей переменной, она объявляется в плэйграунде или в проекте?


#8

а что за REPL у Вас в сообщении об ошибке? Какое окружение у вашей переменной, она объявляется в плэйграунде или в проекте?


#9

Интересно что в учебнике (Усов, Основы разработки приложений под iOS и MacOs) не указано про опциональные переменные и показывают что нет никакой ошибки.
02
Так же и в некоторых других учебных материалах про это не написано.


#10

Даже в книге на этом сайте нет упоминания https://swiftbook.ru/content/basics/constants-and-variables/


#11

В x-code 9.4.1 (последняя, релизная) полет нормальный, ошибок нет.


#12

Если вы объявляете переменную и гарантированно её инициализируете, то никаких опционалов не нужно.

func test(a: Bool) {
    let x: Int
    if a {
        x = 100
    } else {
        x = 0
    }
    print(x)
}

Если в каком то случае ваша переменная может быть не инициализирована, компилятор будет ругаться и нужно сделать её опциональной:

func test(a: Bool) {
    var x: Int!
    if a {
        x = 100
    }
    print(x)
}

#13

Странно, конечно, потому как должно нормально работать. Кстати, в консоли указано, что проблемы начинаются с первого символа в третьей строке. Может просто перебить буквы, иногда такое помогает. Еще, прямо над консолью есть треугольник, если его нажать, то симулятор плэйграунда обновляет результаты. Бывает какие-то ошибки зависают и это помогает. Открыть - закрыть плэйграунд тоже не помешает. А иногда Xcode просто чудит, у меня такое уже несколько раз было, и многие здесь на форуме об этом тоже говорят.


#14

Сейчас можно создать пустую переменную не опционального типа так:
var number = Int()


#15

Она не пустая, она инициализирована нулём. То же самое можно записать используя литерал:

var number = 0

#16

Ну да ) Я имел ввиду что раньше было var number : Int аналогично тому что сейчас
var number = Int()


#17

Вам стоит изучить базовые темы. Оно никогда не было аналогично.

var number: Int не создаёт ничего.
var number = Int() создаёт 0.