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

swift4

#21

Интересно, но у меня ошибка возникает.


#22

У меня тоже самое: error: MyPlayground.playground:2:1: error: variables currently must have an initial value when entered at the top level of the REPL
_ var str : String_
Всё же похоже вы объявляете переменную или внутри структры или метода, где она потом инициализируется.

Ну и как бы не должно работать, вот в чём дело )


#23

Похоже мы тут все как-то перетрудились))

Вот примеры из учебника - Аннотация типов:

var welcomeMessage: String

var red, green, blue: Double

Это классический способ объявления переменной без инициализирующего значения. И именно в playground. Ниже скриншот с этими двумя примерами и первым примером топикстартера.

Как видите никаких ошибок не выдает.

Так что все-таки это просто какой-то глюк Xcode.


#24

А вы путались запустить плейграунд то? :wink:


#25


У меня такая же ошибка, XCode 10.0
Раньше такого не было


#26

похоже это глюк именно Xcode 10.0. Я тоже поймал именно в десятке, в 9.2 такого нет.


#27

Открыл старый проект playground и те же строчки в нем, тот же XCode 10.0 и не ругается ни на что, кажется проблема в playground


#28

прохожу учебник Усова, возникла такая же проблема как и у ТС.
перезагрузка Xcode все решила, ошибки исчезли :roll_eyes:
Version 10.1 - одни глюки(


#29

Никакие это не глюки, посмотрели бы матчасть. Это нововведение от Apple в целях избежать одну из старых ошибок. Теперь переменные нормального типа нельзя объявлять без инициализации (Источник: https://stackoverflow.com/questions/24135605/two-different-types-of-nil-in-swift#24135720). Поэтому либо использовать optional value, либо инициировать переменную сразу


#30

Их можно объявлять без чего-либо, если дальше им когда-либо гарантированно будет присвоено значение перед использованием.
Потому как раз поучите матчать пожалуйста.


#31

Без чего либо можно объявлять только внутри метода. Вне метода у вас будет ошибка. И я говорю не про плейгроунд.


#32

Еще раз - прочтите мой ответ пожалуйста. Если будет гарантированно что-то присвоено.


#33

Пожалуйста

class Test {
    var a: Int

    func method() {
        a = 1
    }
}

#34

И где гарантия, что этот метод когда-либо будет вызван?
+Здесь правила инициализации требуют, чтобы все хранимые свойства получили хоть какое-то значение.


#35
class Test {
    var a: Int

    init() {
        // 100% гарантия
        method()
    }

    func method() {
        a = 1
    }
}

#36

Вот вам пример, который выдаст ошибку

var a: Int
a = 5
print(a)

Заметьте, присвоение значения будет 100%м, без каких-либо условий


#37

Возникла такая же ошибка в Xcode 10. Попробуйте поменять настройку “Execute Playground” c “Manually run” (cкорее всего она стоит по дефолту) на “Automatically run”. Мне помогло, ошибка пропала.


#38

А подскажите, где находится эта настройка?


#39

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


#40

Спасибо! Поменял, посмотрим как оно теперь будет.