Свойства — переменные и константы

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

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

Свойство — это хранилище данных, у которого есть уникальное имя по которому к свойству можно обратиться. Мы можем использовать свойства для хранения данных о количестве нажатий, email пользователя, информацию о том, залогинен ли пользователь в приложении и т.д.

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

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

Содержимое статьи:

Объявление свойств

Для создания свойств в Swift используются ключевые слова let для констант и var для переменных.

let greet = "Привет"
var userName = "Василий"

В коде выше показан процесс объявления константы greet и переменной userName. Объявление — это присвоение ячейке с данными определенного имени, по которому в последующем можно обратиться и получить хранящуюся в данной ячейке информацию.

Для того, чтобы объявить свойство, необходимо:

  1. Использовать ключевое слово let для константы или var для переменной
  2. Написать уникальное имя для этого свойства, которое будет явно указывать на то, что за информация хранится внутри. Как например, userName — по названию этой переменной сразу можно понять, что внутри храниться информация о имени пользователя.
  3. Использовать оператор присвоения = связывающий имя свойства со значением, передаваемым в него
  4. Передать необходимое значение

Инициализация значений

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

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

Чтобы объявить свойство без инициализации, как раз необходимо будет сразу указать тип данных, который будет в нем храниться

//объявление константы с типом данных String без инициализации
let greet: String

В этом примере мы выделили в памяти ячейку, присвоили ей имя greet и присвоили этой ячейке тип данных String.

Теперь нам осталось инициализировать константу greet, для этого необходимо обратиться к ней по имени, без ключевого слова let и присвоить значение, через оператор присвоения =.

Выглядеть это будет так:

//Инициализация объявленного свойства через присвоение значения
greet = "Привет!"

Таким же образом мы можем менять значения в переменных, объявленных через ключевое слово var. Поменять значение константы невозможно.

//Присвоение нового значения переменной
var car = "Toyota"
car = "BMW"

Нейминг свойств

В Swift можно давать название свойств практически любыми символами, в том числе Unicode.

Название свойства не может начинаться с цифры, хотя может включать в себя цифры в любом другом месте. Имена не могут содержать:

  • Пробелы
  • Математические символы
  • Стрелки
  • Точки Unicode без символов или приватные
  • Символы отрисовки линий или прямоугольников

Название свойства должно максимально полно отражать то, что храниться внутри. Стоит избегать названия в один символ, типа i или j, непонятных сокращений, аббревиатур, банальных названий свойств, типа property или newArray.

Технически свойство может начинаться с буквы в любом регистре, но принято все свойства называть с маленькой буквы, а название писать в верблюжей натации camelCase. То есть, если название свойства состоит из 2-х и более слов, писать их без пробелов, каждое новое слово, начиная со второго, писать с большой буквы. Так же признаком дурного тона считается именования свойств русскими словами в транслитерации, лучше всего использовать английские названия. В этом вам может помочь любой онлайн переводчик.

//Примеры написания имени свойств
let userName = "Василий"
var isLoggedIn = true
var maxCarSpeed = 230

Использование свойств

Отдельно, нужно отметить особенность работы компилятора со свойствами. Когда вы объявляете переменную, компилятору постоянно приходится следить за этой ячейкой памяти и наблюдать за изменениями. «А что сейчас с этой переменной? А не поменялось ли значение внутри? А сейчас?» — такой подход требует сильно больше ресурсов, а значит код будет более оптимизирован, если все ваши свойства по-умолчанию будут константами. В последующем, если вам нужно поменять их значение, то Xcode вам подскажет, что данное свойство является неизменяемым и чтобы его поменять, изменить let на var в строке с объявлением. И так же предложит нажать кнопочку «Fix», чтобы сразу сделать это.

Ошибка Xcode при попытке поменять значение в константе

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

Свойства придуманы для того, чтобы иметь быстрый и понятный доступ для вызова хранящейся в них информации из любого места кода. Таким образом мы можем выводить на консоль значение "Василий" из нашей переменной userName, а так же составлять более сложные строки. Например:

//Использование свойства
let userName = "Василий"
print("Добро пожаловать, \(userName)")

В примере выше мы используем интерполяцию строк. Это когда внутри одной строки, то есть текста между двойными кавычками, мы вставляем необходимое свойство. Для этого мы используем символ обратного слеша и пишем название нашего свойства между круглых скобок \(userName).

Так же мы можем использовать свойства, для передачи значений в другие свойства, например:

//Использование значения свойства при объявлении другого свойства
let userName = "Василий"
let greet = "Приветствуем, \(userName)"
print(greet)

В данном примере мы сначала объявляем константу userName и присваиваем ей значение Василий, затем объявляем константу greet, в которую сохраняем строку "Приветствуем, " и добавляем значение переменной userName. На выходе, в консоле мы увидим "Приветствуем, Василий"