Типы данных Swift

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

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

Все переменные имеют тип данных, определяющий, какие данные они могут хранить.


Встроенные типы данных

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

Int

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

  • На 32-битных платформах,IntиInt32длина такая же.
  • На 64-битных платформах,IntиInt64длина такая же.

Если вам не нужны целые числа определённой длины, обычно используйтеIntдостаточно. Это улучшает согласованность и переиспользуемость кода. Даже на 32-битной платформе,Intдиапазон целых чисел, которые можно хранить, может достигать-2,147,483,648~2,147,483,647, чего в большинстве случаев достаточно.

UInt

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

  • На 32-битных платформах,UIntиUInt32длина такая же.
  • На 64-битных платформах,UIntиUInt64длина такая же.

Примечание:Старайтесь не использоватьUInt, если только вам действительно не нужно хранить беззнаковое целое того же размера, что и длина машинного слова текущей платформы. За исключением этого случая, лучше всего использоватьInt, даже если значение, которое вы хотите сохранить, заведомо неотрицательно. При последовательном использованииIntможет улучшить повторное использование кода, избежать преобразований между разными типами чисел и соответствовать выводу типов чисел.

Следует отметить следующие моменты о целочисленных типах:

  • В 32-битных системах Int и Int32 имеют одинаковую длину.

  • В 64-битных системах Int и Int64 имеют одинаковую длину.

  • В 32-битных системах UInt и UInt32 имеют одинаковую длину.

  • В 64-битных системах UInt и UInt64 имеют одинаковую длину.

  • Int8, Int16, Int32 и Int64 представляют соответственно 8-битную, 16-битную, 32-битную и 64-битную формы знаковых целых чисел.

  • UInt8, UInt16, UInt32 и UInt64 представляют соответственно 8-битную, 16-битную, 32-битную и 64-битную формы беззнаковых целых чисел.

Числа с плавающей точкой: Float, Double

Числа с плавающей точкой — это числа с дробной частью, например3.14159,0.1и-273.15。

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

  • DoubleПредставляет 64-битное число с плавающей запятой. Используйте этот тип, когда вам нужно хранить очень большие или высокоточные числа с плавающей запятой.
  • FloatПредставляет 32-битное число с плавающей запятой. Вы можете использовать этот тип, если высокая точность не требуется.

Примечание:
Doubleимеет очень высокую точность, не менее 15 цифр, в то время какFloatимеет всего 6 цифр как минимум. Какой тип вы выберете, зависит от диапазона значений, которые должен обрабатывать ваш код.

Логическое значение: Bool

Swift имеет базовый логический тип, называемый Bool. Булевы значения — это логические значения, поскольку они могут быть только true или false. Swift имеет две булевы константы: true и false.

Строка: String

Строка — это коллекция последовательностей символов, например:

"Hello, World!"

Символ: Character

Символ обозначает одну букву, например:

"C"

Опциональный тип: Optional

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

Числовые диапазоны

В следующей таблице показан объём памяти для различных типов переменных, а также максимальные и минимальные значения этих типов переменных:

Type Размер (байты) Диапазон значений
Int8 1 байт от -128 до 127
UInt8 1 байт от 0 до 255
Int32 4 байта -2147483648 до 2147483647
UInt32 4 байта 0 до 4294967295
Int64 8 байт -9223372036854775808 до 9223372036854775807
UInt64 8 байт 0 до 18446744073709551615
Float 4 байта 1.2E-38 до 3.4E+38 (~6 цифр)
Double 8 байт 2.3E-308 до 1.7E+308 (~15 цифр)

Псевдонимы типов

Псевдоним типа определяет другое имя для существующего типа. Псевдонимы типов определяются с помощью ключевого слова typealias. Синтаксис следующий:

typealias newname = type

Например, следующий код определяет псевдоним типа для Int с именем Feet:

typealias Feet = Int

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

import Cocoa

typealias Feet = Int
var distance: Feet = 100
print(distance)

Мы используем Playground для запуска приведённой выше программы, и вывод будет таким:

100

Типобезопасность

Swift — это типобезопасный язык.

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

import Cocoa

var varA = 42
varA = "This is hello"
print(varA)

Приведённая выше программа выдаст ошибку в Xcode:

error: cannot assign value of type 'String' to type 'Int'
varA = "This is hello"

Это означает, что строку 'String' нельзя присвоить переменной 'Int'.


Вывод типов

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

Если вы не указываете тип явно, Swift использует вывод типов, чтобы выбрать подходящий тип.

Например, если вы присваиваете 42 новой константе, не указывая тип, Swift может вывести, что тип константы — Int, потому что присвоенное ей начальное значение выглядит как целое число:

let meaningOfLife = 42
// meaningOfLife 会被推测为 Int 类型

Аналогично, если вы не указываете тип для литерала с плавающей точкой, Swift выведет, что вы хотите Double:

let pi = 3.14159
// pi 会被推测为 Double 类型

При выводе типа чисел с плавающей точкой Swift всегда выбирает Double, а не Float.

Если в выражении присутствуют как целые числа, так и числа с плавающей точкой, оно будет выведено как тип Double:

let anotherPi = 3 + 0.14159
// anotherPi 会被推测为 Double 类型

Исходное значение 3 не имеет явного объявления типа, а в выражении присутствует литерал с плавающей запятой, поэтому выражение выводится как тип Double.

Примеры

import Cocoa

// varA 会被推测为 Int 类型 
var varA = 42
print(varA)

// varB 会被推测为 Double 类型  
var varB = 3.14159
print(varB)

// varC 也会被推测为 Double 类型   
var varC = 3 + 0.14159
print(varC)

Выполните приведённый выше код, вывод:

42
3.14159
3.14159
Другие расширения