Статьи

Swift From Scratch: переменные и константы

В первой статье Swift From Scratch вы узнали о игровых площадках Xcode и написали свои первые строки Swift. В этой статье мы начнем изучать основы языка программирования Swift с изучения переменных и набора текста. Мы также внимательно рассмотрим константы и то, почему вам рекомендуется использовать их как можно чаще.

В следующих выпусках этой серии мы будем использовать игровые площадки Xcode для изучения основ языка программирования Swift. Как мы видели в предыдущей статье , игровые площадки идеально подходят для обучения и изучения Swift.

Давайте начнем с создания новой игровой площадки для этого урока. Я призываю вас следовать за! Использование языка — отличный способ изучить его синтаксис и понять его концепции.

Запустите Xcode 8 и создайте новую игровую площадку, выбрав New> Playground … в меню « Файл» Xcode. Введите название игровой площадки, установите « Платформа» на iOS и нажмите « Далее» . Скажите Xcode, где вы хотите сохранить игровую площадку, и нажмите « Создать» .

Создать новую игровую площадку

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

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

Ключевое слово var — единственный способ объявить переменную в Swift. Наиболее распространенным и кратким использованием ключевого слова var является объявление переменной и присвоение ей значения.

1
var street = «5th Avenue»

Помните, что мы не заканчиваем эту строку кода точкой с запятой. Хотя точка с запятой необязательна в Swift, рекомендуется не использовать точку с запятой, если она не требуется.

Вы также, возможно, заметили, что мы не указали тип при объявлении переменной street . Это подводит нас к одной из ключевых особенностей Swift — выводу типа .

Вышеприведенный оператор объявляет переменную street и присваивает ей значение 5th Avenue . Если вы новичок в Swift или вы привыкли к JavaScript или PHP, вы можете подумать, что Swift — это типизированный или слабо типизированный язык, но ничто не может быть дальше от истины. Позвольте мне повторить, что Swift является строго типизированным языком. Безопасность типов является одним из краеугольных камней языка.

Мы только начинаем, и Swift уже показывает нам немного своей магии. Хотя вышеприведенный оператор явно не указывает тип, переменная street имеет тип String . Это вывод типа Swift в действии. Значение, которое мы присваиваем street является строкой. Свифт достаточно умен, чтобы увидеть это, и неявно устанавливает тип street на String .

Следующее утверждение дает нам тот же результат. Разница в том, что мы явно устанавливаем тип переменной. Это утверждение буквально говорит о том, что street имеет тип String .

1
var street: String = «5th Avenue»

Swift требует от вас явно или неявно установить тип переменных и констант. Если вы этого не сделаете, Свифт жалуется, выдавая ошибку. Добавьте следующую строку на игровую площадку, чтобы понять, что я имею в виду.

1
var number

Это утверждение будет вполне допустимым в JavaScript или PHP. В Swift, однако, это недействительно. Причина проста. Хотя мы объявляем переменную с помощью ключевого слова var , мы не указываем тип переменной. Swift не может определить тип, так как мы не присваиваем значение переменной. Если вы нажмете на ошибку, Xcode скажет вам, что не так с этим утверждением.

Тип аннотации отсутствует в шаблоне

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

1
var number: String

Как вы можете видеть ниже, присвоение новых значений street и number просто и без сюрпризов.

1
2
3
4
5
var street: String = «5th Avenue»
var number: String
 
street = «Main Street»
number = «10»

Не будет ли проще присвоить число 10 переменной number ? Нет необходимости хранить номер улицы в виде строки. Посмотрим, что будет, если мы это сделаем.

1
2
3
4
5
var street: String = «5th Avenue»
var number: String
 
street = «Main Street»
number = 10

Если мы присвоим число целому number , Xcode выдаст нам еще одну ошибку. Сообщение об ошибке ясно. Мы не можем присвоить значение типа Int переменной типа String . Это не проблема в слабо типизированных языках, но в Swift.

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

Чтобы избавиться от ошибки, нам нужно объявить number переменную как Int . Посмотрите на обновленный пример ниже.

1
2
3
4
5
var street: String = «5th Avenue»
var number: Int
 
street = «Main Street»
number = 10

Важно помнить следующее. Вы можете объявить переменную с помощью ключевого слова var , и вам не нужно явно объявлять тип переменной. Однако помните, что каждая переменная и константа имеет тип в Swift. Если Свифт не может определить тип, то он жалуется. У каждой переменной есть тип, и этот тип нельзя изменить.

Константы похожи на переменные с точки зрения типизации. Разница лишь в том, что значение константы нельзя изменить, если оно имеет значение. Значение константы, ну … константа.

Чтобы объявить константу, вы используете ключевое слово let . Взгляните на следующий пример, в котором мы объявляем street как константу вместо переменной.

1
2
3
4
5
let street: String = «5th Avenue»
var number: Int
 
street = «Main Street»
number = 10

Если мы обновим только первую строку, заменив var на let , Xcode выдаст ошибку по понятным причинам. Попытка изменить значение константы в Swift недопустима. Удалите или закомментируйте строку, в которой мы пытаемся присвоить новое значение street чтобы избавиться от ошибки.

1
2
3
4
5
let street: String = «5th Avenue»
var number: Int
 
// street = «Main Street»
number = 10

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

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

Большинство языков программирования имеют широкий диапазон типов для хранения строк, целых чисел, чисел с плавающей запятой и т. Д. Список доступных типов в Swift сжат. Взгляните на следующий список:

  • Int
  • Float
  • Double
  • String
  • Character
  • Bool

Важно понимать, что вышеуказанные типы не являются базовыми или примитивными типами. Они являются именованными типами, которые реализуются Swift с использованием структур. Позже мы исследуем структуры более подробно в этой серии, но хорошо знать, что типы, с которыми мы сталкивались до сих пор, не совпадают с типами примитивов, которые вы, возможно, использовали, например, в Objective-C.

В Swift есть еще много типов данных, таких как кортежи, массивы и словари. Мы исследуем это позже в этой серии.

Есть еще одна тема, которую мы должны обсудить, преобразование типов . Взгляните на следующий фрагмент Objective-C. Этот кодовый блок выводит значение 314.000000 на консоль.

1
2
3
4
int a = 100;
float b = 3.14;
 
NSLog(@»%f», (a * b));

Среда выполнения Objective C неявно преобразует a в значение с плавающей запятой и умножает его на b . Давайте перепишем приведенный выше фрагмент кода с помощью Swift.

1
2
3
4
var a = 100
var b = 3.14
 
print(a * b)

Пока print(_:separator:terminator:) функцию print(_:separator:terminator:) . Сначала я хочу сосредоточиться на умножении a и b . Свифт выводит тип a , Int и b , Double . Однако, когда компилятор пытается умножить a и b , он замечает, что они не одного типа. Это может не показаться вам проблемой, но это для Swift. Свифт не знает, какого типа должен быть результат этого умножения. Должно ли оно быть целым или двойным?

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

1
2
3
4
var a = 100
var b = 3.14
 
print(Double(a) * b)

Обратите внимание, что тип не изменился. Хотя приведенный выше фрагмент кода может выглядеть как приведение типов, это не одно и то же. Мы используем значение, сохраненное в a чтобы создать Double , и этот результат используется при умножении на b . Результат умножения имеет тип Double .

Вам нужно помнить, что Swift отличается от C и Objective-C. Он неявно преобразует значения переменных и констант. Это еще одна важная концепция для понимания.

В предыдущем фрагменте кода вы вызвали свою первую функцию print(_:separator:terminator:) . Эта функция похожа на NSLog Objective-C; он что-то печатает и добавляет новую строку. Чтобы напечатать что-либо на консоль или панель результатов справа, вы вызываете print(_:separator:terminator:) и передаете ей параметр. Это может быть переменная, константа, выражение или литерал. Взгляните на следующие примеры.

1
2
3
4
5
6
7
var string = «this is a string»
let constant = 3.14
 
print(string)
print(constant)
print(10 * 50)
print(«string literal»)

Также можно использовать интерполяцию строк для объединения переменных, констант, выражений и литералов. Строковая интерполяция очень проста в Swift. Оберните переменные, константы, выражения или литералы в \() . Проще простого.

1
2
3
4
let street = «5th Avenue»
let number = 10
 
print(«She lives at \(street) \(number).»)

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

Мы создали полное руководство, которое поможет вам изучить Swift , независимо от того, начинаете ли вы с основ или начинаете изучать более сложные темы.

Если вы хотите узнать, как использовать Swift 3 для кодирования реальных приложений, ознакомьтесь с нашим курсом « Создание приложений для iOS с помощью Swift 3» . Если вы новичок в разработке приложений для iOS или хотите перейти с Objective-C, этот курс поможет вам начать работу с Swift для разработки приложений.

  • стриж
    Создавайте приложения для iOS с помощью Swift
    Маркус Мюльбергер