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

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
Xcode выдает ошибку. В чем может быть проблема? + нужен совет
#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.


#18

Ради интереса проверил у себя

var numDouble: Double

Все работает нормально, Xcode 9.2. Похоже действительно глюк по ходу.


#19

Смотря где так создавать. В playground так просто не дает создать, а вот внутри метода так можно делать.


#20

Иван, ты наверное имел в виду что-то другое, потому как именно в playground эта строка

var numDouble: Double

спокойно работает.