Статьи

Создайте приложение для iOS с Swift 3: переменные, константы и дополнительные

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

В этом коротком видеоуроке из моего курса по созданию приложений для iOS с помощью Swift 3 я объясню переменные, константы и дополнительные функции, уделив особое внимание системе типов Swift.

У Swift есть некоторые функции, которые очень мощные и удобные, когда дело доходит до переменных. Начнем с новой игровой площадки .

Новая игровая площадка в Xcode

Как видите, на экране уже есть присвоение переменной, созданное шаблоном. Перед ним стоит ключевое слово var , за которым следует имя переменной и присваивание — здесь "Hello, playground" . Все идет нормально.

То, что вы не видите в этой строке кода, является назначением типа. Это необязательно. Давайте создадим новую переменную с именем int и присвоим ей значение 8 :

var int = 8

Хорошо, теперь давайте изменим переменную str на значение 4 . Сразу же компилятор жалуется, что вы пытаетесь установить значение типа int для типа String .

Как он узнал об этом?

Это выведено. Несмотря на то, как это выглядит, Swift является статически типизированным языком, что означает, что каждая переменная имеет тип. Но в отличие от большинства других языков, он может выводить тип, когда ему присваивается значение во время определения. В нашем случае это означает, что поскольку переменной str была задана строка, она автоматически получила тип String .

То же самое для переменной int . Этот мы можем установить на 4 потому что это целое число.

Иногда вы хотите явно указать тип переменной. Конечно, это также возможно. Давайте создадим переменную double и установим ее в 4 .

Мы уже знаем, что оно будет инициализировано целым числом, несмотря на имя. Поэтому, когда мы пытаемся установить его на 4.5 , это не получится. Чтобы убедиться, что он будет двойным, мы должны установить его, используя двоеточие после имени переменной, за которым следует тип, в верхнем регистре, Double .

Хорошо, теперь о константах. Это те, которые следует использовать, если вы не хотите изменять значение, которое вы изначально установили.

Компилятор Swift очень умен в этом и предупреждает вас, если вы используете переменную, для которой вы хотите использовать константу, и наоборот. Чтобы определить константу, вам понадобится ключевое слово let вместо var . В предыдущем коде, если вы измените переменную double на константу, компилятор предупредит вас об изменениях, которые вы пытаетесь внести в следующей строке, установив для нее значение 4.5 .

Когда Swift впервые появился, было очень забавно то, что он полностью совместим с Unicode. Это также означает, что имена переменных могут быть любыми символами в Юникоде, например, если вы хотите установить π на 3.14159 . Он даже поддерживает использование эмодзи для именования ваших переменных и функций.

Последняя важная особенность, связанная с переменными в 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.

использовать инициализатор int для преобразования нашего двойного

Чтобы более подробно остановиться на приведении типов, мне нужно представить новый набор типов, коллекций. Я уверен, что вы знаете, что такое массив, и, конечно, они также доступны в 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 с Swift 3

Если вы новичок в разработке приложений для iOS или хотите перейти с Objective-C, этот курс поможет вам начать работу с Swift для разработки приложений. Вы узнаете обо всех основных функциях языка, от переменных до классов. Вы также познакомитесь с использованием XCode для разработки приложений, когда будете следовать и реализовывать проект курса: интерактивный просмотрщик последовательности Фибоначчи.