2015-12-19 2 views
4

Прежде всего, я считаю, что мой вопрос отличается от этих вопросов о том, «что является необязательным в быстрой». Потому что я спрашиваю, почему я могу это сделать, а не что это такое.Почему я могу объявить переменную без написания дополнительной отметки?

Я новичок в быстром. Когда я узнаю этот сказочный язык сегодня вечером, у меня возникла проблема, что я никогда не видел эту отметку - «?» на языке программирования. И я искал его некоторое время. Я знаю, какое необязательное связывание теперь.

Но теперь у меня появился новый вопрос. Когда я хочу объявить переменную, которая не является необязательной. Я могу написать этот синтаксис:

var friend: String 

Но я не могу написать:

var friend: String = nil 

Чтобы объявить переменную, которая равна нулю, можно использовать только по желанию:

var friend: String? = nil 

Давайте посмотрим первый фрагмент кода. Когда будет объявлена ​​новая переменная , ее значение равно нулю, правильно? Потому что я не придавал ему никакой ценности. Но в соответствии с определением необязательного, как второй и третий фрагменты кода, мы не можем назначить nil необязательным переменным.

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

Заранее благодарен!

+2

Первый не ноль. Это неинициализированная переменная. Как и Марк, вы получите ошибку времени компиляции, если попытаетесь запустить первый. Однако, если это было необязательно.Это позволит вам запустить его, поскольку оно имеет значение nil. – mn1

ответ

7

Swift позволяет объявлять необязательную переменную или константу без инициализации ее в объявлении, но перед ее использованием вам нужно будет присвоить ей значение. Значение переменной или константы равно не nil (необязательные значения никогда не могут быть nil) - он просто не имеет определенного значения. В основном вы говорите, что позже вы дадите ему значение, возможно, на основе результата вычисления или оператора if.

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

+0

Спасибо вам большое! Раньше я этого не знал. Я думал, что это похоже на C++, когда я объявляю новую переменную без ее инициализации, она равна null (которая в C++ равна 0). Еще раз спасибо. –

+0

Рад, что это помогло! Обратите внимание, что опции автоматически инициализируются нулем в Swift, если вы не дадите им значение. Кроме того, обратите внимание, что в C++ автоматически инициализируются только _some_ типы переменных (например, глобальные переменные), тогда как другие (такие как локальные переменные) остаются в неопределенном состоянии. См. [Этот вопрос для краткого изложения] (http://stackoverflow.com/questions/2218254/variable-initialization-in-c). –

0

Первое введенное вами значение - это неинициализированная переменная с типом строки.

Очень распространенный шаблон в программировании - это операция, которая может или не может вернуть значение. На некоторых языках, таких как javascript, при достижении нулевого значения наша программа продолжает работать очень хорошо, пока наша программа не зависит от этого значения для продолжения. Например, в других языках, например, в java, нулевое значение может вызвать исключение NullPointerException и сбой нашей программы.

Решение Swift для этой проблемы является опционным. По умолчанию, если мы определяем переменную без значения, компилятор будет жаловаться. Итак, чтобы объявить значение, которое может иметь или не иметь значения во время выполнения, нам нужно добавить? который известен как «перенос наших значений в необязательный». Это связано с тем, что мы действительно буквально обертываем наше значение в необязательном типе Swifts, тем самым придавая ему значение. Чтобы получить лучшее представление о том, что происходит, мы можем посмотреть, как Swifts Необязательное перечисление.

enum Optional<T> { 
    case None // has no value 
    case Some(T) // has some value 
} 
+0

Благодарим вас за ответ. Ваш ответ действительно полезен. Вы говорили о некоторых других языках. Теперь мне нравится быстро все больше.) –

+0

Нет проблем, Swift - это аккуратный язык, и теперь, когда он является открытым исходным кодом, мы можем видеть его как серверный язык. –

+0

Но почему это серверная сторона? Я только начинаю изучать Свифта. Я видел, что в некоторых документах говорилось, что есть две основные части быстрого, UIKIT и какао. мы можем использовать UIKIT, чтобы сделать много дизайна пользовательского интерфейса. Скажите, пожалуйста, если я это неправильно понял. –

Смежные вопросы