Переменные в Swift являются фундаментальной и мощной концепцией языка. Хотя они кажутся простыми, они включают в себя множество функциональных возможностей, а также есть некоторые распространенные подводные камни, с которыми вы можете столкнуться при программировании на Swift.
В этом коротком видеоуроке из моего курса по созданию приложений для iOS с помощью Swift 3 я объясню переменные, константы и дополнительные функции, уделив особое внимание системе типов Swift.
Создайте приложение для iOS с Swift 3: переменные, константы и дополнительные
Переменные в Свифт 3
У Swift есть некоторые функции, которые очень мощные и удобные, когда дело доходит до переменных. Начнем с новой игровой площадки .
Как видите, на экране уже есть присвоение переменной, созданное шаблоном. Перед ним стоит ключевое слово var
, за которым следует имя переменной и присваивание — здесь "Hello, playground"
. Все идет нормально.
То, что вы не видите в этой строке кода, является назначением типа. Это необязательно. Давайте создадим новую переменную с именем int и присвоим ей значение 8
:
var int = 8
Хорошо, теперь давайте изменим переменную str
на значение 4
. Сразу же компилятор жалуется, что вы пытаетесь установить значение типа int
для типа String
.
Как он узнал об этом?
Это выведено. Несмотря на то, как это выглядит, Swift является статически типизированным языком, что означает, что каждая переменная имеет тип. Но в отличие от большинства других языков, он может выводить тип, когда ему присваивается значение во время определения. В нашем случае это означает, что поскольку переменной str
была задана строка, она автоматически получила тип String
.
То же самое для переменной int
. Этот мы можем установить на 4
потому что это целое число.
Иногда вы хотите явно указать тип переменной. Конечно, это также возможно. Давайте создадим переменную double
и установим ее в 4
.
Мы уже знаем, что оно будет инициализировано целым числом, несмотря на имя. Поэтому, когда мы пытаемся установить его на 4.5
, это не получится. Чтобы убедиться, что он будет двойным, мы должны установить его, используя двоеточие после имени переменной, за которым следует тип, в верхнем регистре, Double
.
Константы в Свифт 3
Хорошо, теперь о константах. Это те, которые следует использовать, если вы не хотите изменять значение, которое вы изначально установили.
Компилятор Swift очень умен в этом и предупреждает вас, если вы используете переменную, для которой вы хотите использовать константу, и наоборот. Чтобы определить константу, вам понадобится ключевое слово let
вместо var
. В предыдущем коде, если вы измените переменную double
на константу, компилятор предупредит вас об изменениях, которые вы пытаетесь внести в следующей строке, установив для нее значение 4.5
.
Когда Swift впервые появился, было очень забавно то, что он полностью совместим с Unicode. Это также означает, что имена переменных могут быть любыми символами в Юникоде, например, если вы хотите установить π
на 3.14159
. Он даже поддерживает использование эмодзи для именования ваших переменных и функций.
Необязательные в Swift 3
Последняя важная особенность, связанная с переменными в Swift, — это опции
Всякий раз, когда вы определяете переменную, вам нужно инициализировать ее перед использованием. Если вы этого не сделаете, ваша программа не будет компилироваться. Однако иногда ваша переменная не всегда имеет значение. Например, если у вас есть функция обратного вызова, которая либо возвращает результат операции или ошибку.
Нулевые указатели
В программировании всегда была концепция нулевых указателей. В Swift они называются ноль. Это инициализированные переменные с особым значением ничего. Если вы хотите разрешить nil-значение для переменной в Swift, вы должны явно указать это, и переменная становится необязательной. Например:
1
2
3
|
var myVariable : String?
print(myVariable)
|
Необязательный определяется путем добавления знака вопроса к типу. Это немедленно заставляет оператор print работать и выводит nil
.
Давайте изменим мою переменную на двойную, и давайте умножим ее на 2. Хотя nil разрешен, вы ничего не можете с этим поделать. Это означает, что нам нужна защита. Поскольку нулевые проверки являются очень распространенной проблемой в программировании, разработчики языка Swift решили дать нам особый способ решения этой проблемы.
Возможно, вы узнали, что присвоение переменной в операторе if
является плохой практикой. Для Свифта это другое. Если вы делаете, if let myVariable = myVariable
, он автоматически if let myVariable = myVariable
для вас и сделает его доступным для вас в блоке if, если он не равен nil.
Итак, давайте инициализируем переменную значением. В блоке он умножит его на 2 и напечатает. Но если мы попытаемся сделать то же самое за пределами блока, он, конечно, потерпит неудачу.
Если вы абсолютно точно знаете, что переменная имеет значение, и вы не хотите заключать ее в условное выражение, вы также можете принудительно развернуть ее, используя восклицательный знак. Это развернет его, если есть значение, но если его нет, он очень сильно потерпит неудачу с исключением времени выполнения. Поэтому, если вы много работаете с опциями, обязательно запомните это специальное утверждение if
.
Преобразование типов
При работе со статическими типами let
очень важно преобразование типов.
Допустим, у вас есть двойной и хотите целое число. В Swift каждый тип поставляется с инициализатором, даже логическим или целым числом. Типы по умолчанию также имеют инициализаторы для совместимых типов, поэтому мы можем использовать инициализатор int
для преобразования нашего double.
Чтобы более подробно остановиться на приведении типов, мне нужно представить новый набор типов, коллекций. Я уверен, что вы знаете, что такое массив, и, конечно, они также доступны в Swift. Давайте создадим массив целых чисел:
let intArray = [1, 2, 3, 4]
Возможно, вы привыкли помещать в массив все, что приходит на ум, а также смешивать типы. Но в Swift массивы также статически типизируются относительно их значений. Это означает, что если вы хотите добавить строку в ваш массив целых чисел, Swift не знает, что делать. let intArray = [1, 2, 3, 4, "String"]
выдаст сообщение об ошибке.
Итак, давайте удалим строку и добавим ее отдельной строкой в массив. Теперь он показывает сообщение об ошибке, которое я хотел показать вам.
Эта ошибка происходит от типа массива, так как он выводится как массив целых чисел. Мы можем явно установить этот тип, используя квадратные скобки вокруг типа содержимого. Это самый лаконичный метод определения массива.
Вы также можете использовать массив типов и использовать угловые скобки для определения типа. Это может показаться вам более знакомым, если вы пришли с другого языка. Конечно, есть некоторые случаи, когда вы действительно хотите разрешить смешанные типы в массиве. Через минуту я покажу вам другой тип данных, в котором вы будете хранить ответ JSON веб-сервера, который может содержать числа, логические значения или строки.
В Swift есть специальное ключевое слово, которое позволяет присутствовать этим типам, и оно называется Any
. Это означает, что это может быть любой тип. Конечно, проблема в том, что мы все еще на языке статической типизации. Теперь значения имеют тип Any
. Если мы хотим сложить вместе первые два целых числа, это просто не удастся сделать, потому что тип Any
не поддерживает оператор сложения.
Это означает, что мы должны использовать приведение типов, чтобы преобразовать их в правильный тип. Для этого мы можем использовать ключевое слово as
. И, конечно же, поскольку это небезопасно, нам также необходимо использовать взрыв, чтобы форсировать его, поскольку нет никакого известного преобразования между Any
и int
. Если мы делаем это, мы должны быть очень осторожны с реальными типами. Если мы приведем неправильный элемент к целому числу, он потерпит неудачу во время выполнения с исключением.
Теперь отсутствует одна важная вещь. Это словари. Если вы пришли с другого языка, вы можете знать их как карты или хэши.
У них есть ключи, которые имеют значения. Если вы хотите определить их явно, вы будете делать аналогично массиву, используя квадратные скобки, но разделять ключ и значение двоеточием.
Определение ключа String
и значения Any
будет очень распространенным случаем при анализе данных JSON из Интернета.
Смотреть полный курс
В полном курсе « Создание приложений для iOS с помощью Swift 3» вы получите подробное руководство по использованию Swift 3 для создания приложений для iOS.
Если вы новичок в разработке приложений для iOS или хотите перейти с Objective-C, этот курс поможет вам начать работу с Swift для разработки приложений. Вы узнаете обо всех основных функциях языка, от переменных до классов. Вы также познакомитесь с использованием XCode для разработки приложений, когда будете следовать и реализовывать проект курса: интерактивный просмотрщик последовательности Фибоначчи.