Язык Swift часть 2. Простые типы данных.
Что такое типы данных?
В каждой программе данные хранятся в виде простого текста, чисел, последовательностей. В этой статье расскажу отличия данных друг от друга, и на какие типы они разделяются в языке Swift.
"Тип данных (тип) — множество значений и операций над этими значениями (IEEE Std 1320.2-1998). Другие определения:
- Тип данных — класс данных, характеризуемый членами класса и операциями, которые могут быть к ним применены (ISO/IEC/IEEE 24765-2010).
- Тип данных — категоризация абстрактного множества возможных значений, характеристик и набор операций для некоторого атрибута (IEEE Std 1320.2-1998).
- Тип данных — категоризация аргументов операций над значениями, как правило, охватывающая как поведение, так и представление (ISO/IEC 19500-2:2003).
- Тип данных — допустимое множество значений. Тип определяет возможные значения и их смысл, операции, а также способы хранения значений типа. Изучается теорией типов. Неотъемлемой частью большинства языков программирования являются системы типов, использующие типы для обеспечения той или иной степени типобезопасности."
-- Цитата из Википедии
Типы данных бывают нескольких разновидностей:
- Простые
- Составные
К простым относятся такие типы данных, как Int, Float, Double, Boolean, Char, String
.
К составным можно отнести arrays, tuples, dictionaries, sets
.
Стоит выделить опциональные типы. О них поговорим отдельно.
Вот таблица встроенных простых типов данных в язык Swift:
№ | Тип данных | Объем памяти | Диапазон значений |
---|---|---|---|
1 | Int8 | 1 байт | от -127 до 127 |
2 | UInt8 | 1 байт | от 0 до 255 |
3 | Int16 | 2 байта | от -32768 до 32767 |
4 | UInt16 | 2 байта | от 0 до 65535 |
5 | Int32 | 4 байта | от -2147483648 до 2147483647 |
6 | UInt32 | 4 байта | от 0 до 4294967295 |
7 | Int64 | 8 байт | от -9223372036854775808 до 9223372036854775807 |
8 | Unt64 | 8 байт | от 0 до 18446744073709551615 |
9 | Float | 4 байта | от 1.2E-38 до 3.4E+38 |
10 | Double | 8 байт | от 2.3E-308 до 1.7E+308 |
11 | Bool | 1 байт | true/false |
12 | String | 16 байт | ASCII |
13 | Character | 16 байт | ASCII |
Узнать сколько памяти выделяется под конкретный тип данных можно например следующим кодом на языке Swift:
import Foundation
let a: Int8 = 100
let b: Int32 = 100
let c: Int64 = 100
let d: Float = 100.00
let e: Double = 100.00
let h: String = "empty"
let i: Character = "c"
let j: Bool = true
print(MemoryLayout.size(ofValue: a))
print(MemoryLayout.size(ofValue: b))
print(MemoryLayout.size(ofValue: c))
print(MemoryLayout.size(ofValue: d))
print(MemoryLayout.size(ofValue: e))
print(MemoryLayout.size(ofValue: h))
print(MemoryLayout.size(ofValue: i))
print(MemoryLayout.size(ofValue: j))
/* Вывод будет таким:
1
4
8
4
8
16
16
1
*/
По умолчанию используется просто тип 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-битных форм целых чисел без знака.
Типобезопасность
Swift - это типобезопасный язык, что означает, что если часть кода ожидает получить String, вы не можете передать ей Int по ошибке.
Swift всегда выполняет проверки типов при компиляции вашего кода и помечает любые несовпадающие типы как ошибки.
Например данный код вызовет ошибку:
var i = 100
var j: String
j = i //Error
Приведение типов
Обычно тип объявляется при объявлении переменных или констант:
var a: String = "this is string"
Но Swift может самостоятельно определить тип данных, которые получают переменные и константы:
var a = "string"
var x = 10 //Int
var y = 5.55 //Float
print(x+y) //Result = 15.55(Float)