Переменные и константы. Типы данных


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

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

1
var name = "Tom"
В данном случае переменная имеет имя "name" и в качестве значения хранит строку "Tom". После определения переменной мы можем использовать ее, например, передать ее функцию print, чтобы вывести ее значение:

1
2
var name = "Tom"
print(name)
Переменные в Swift
Отличительной особенностью переменных является то, что мы можем изменять их значение многократно во время работы программы. Например:

1
2
var name = "Tom" // значение Tom
name = "Bob" // значение Bob
Кроме переменных для хранения данных в программе могут использоваться константы. Константы подобны переменным, они также хранят некоторое значение, за тем исключением, что определяются с помощью ключевого слова let, и мы не можем после их инициализации изменить их значение:

1
2
let name = "Tom" // значение Tom
// name = "Bob" - так сделать нельзя, так как name - константа
Таким образом, если значение некоторой переменной в течении программы меняться не будет, то вместо этой переменной лучше использовать константу.

Мы можем определить сразу несколько переменных и констант на одой строке. В этом случае они должны разделяться запятой:

1
var name = "Tom", surname = "Smith"
Правила именования
Переменные и константы должны иметь уникальные имена. Нельзя использовать в программе несколько переменных и (или) констант с одними и теми же именами.

Причем хорошей практикой является использование названий в так называемом "верблюжем регистре" или CamelCase. То есть названия начинаются с маленькой буквы. Если название состоит из нескольких слов, то только первое из них начинается с маленькой буквы. Например:

1
2
var personName = "Tom"
var personStreatAddress = "St. Patrick avenue, 20"
Типы данных
Каждая переменная или константа хранит в себе значение определенного типа. Например, выше использованная переменная name хранит строку:

1
var name = "Tom"
В языке Swift имеются следующие типы данных:

Int8: представляет целые числа со знаком размером не более 8 бит (от -128 до 127)

UInt8: представляет целые положительные числа размером не более 8 бит (от 0 до 255)

Int16: представляет целые числа со знаком размером не более 16 бит (от -32768 до 32767)

UInt16: представляет целые положительные числа размером не более 16 бит (от 0 до 65535)

Int32: представляет целые числа со знаком размером не более 32 бита (от -2147483648 до 2147483647)

UInt32: представляет целые положительные числа размером не более 32 бита (от 0 до 4294967295)

Int64: представляет целые числа со знаком размером не более 64 бита (от -9223372036854775808 до 9223372036854775807)

UInt64: представляет целые положительные числа размером не более 64 бита (от 0 до 18446744073709551615)

Int: представляет целые числа со знаком, например, 1, -30, 458. На 32-разрядных платформах эквивалентен Int32, а на 64-разрядных - Int64

UInt: представляет целые положительные числа, например, 1, 30, 458. На 32-разрядных платформах эквивалентен UInt32, а на 64-разрядных - UInt64

Float: 32-битное число с плавающей точкой, содержит до 6 чисел в дробной части

Double: 64-битное число с плавающей точкой, содержит до 15 чисел в дробной части

Float80: 80-битное число с плавающей точкой

Bool: представляет логическое значение true или false

String: представляет строку

Character: представляет отдельный символ

Тип переменных и констант может определен явно или неявно. Выше тип определялся неявно. Но мы также можем явным образом определить тип:

1
2
var age: Int = 32
var name: String = "Tom"
Определение переменной с типом происходит по шаблону:

1
var название_переменной: тип_переменной = значение_переменной
Также мы можем сначала определить переменную, а потом присвоить ей значение:

1
2
var name: String
name = "Tom"
Также можно определить сразу набор однотипных переменных:

1
var height, weight: Double
Неявная типизация
Если мы явным образом не указываем тип переменных и констант, то он автоматически выводится системой на основании хранящегося значения. Например:

1
var name = "Tom"
Здесь явным образом не указан тип переменной name, однако поскольку она хранит строку, то система будет рассматривать эту переменную как объект типа String. Или, например:

1
var age = 32
Здесь также явно не указан тип переменной, поэтому система будет рассматривать эту переменную как объект Int, то есть целое число.

Однако при таком подходе следует учитывать, что Swift не всегда выводит те типы, которые нам могут быть нужны. Например, все целые числа Swift воспринимает как объекты типа Int, а дробные числа - как объекты типа Double. Это надо учитывать, чтобы не попасть в некорректные ситуации. Например:

1
2
3
var d = 3.4 // тип Double
var f : Float = 1.2
d = f // ! Ошибка - разные типы
В данном случае на основании присвоенного значения переменная d будет представлять тип Double, а переменная f представляет тип Float, поэтому при присвоении переменной d значения f мы получим ошибку.

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

1
2
var age: Int
age = "Tom"
Ошибка возникает, так как переменная age ожидает число, а строка "Том" не является числом и не соответствует переменной age по типу.

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

1
2
var age: Int = 22
var years = age