Типы данных 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Другие расширения