Язык Swift часть 2. Простые типы данных.

Что такое типы данных?

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




"Тип данных (тип) — множество значений и операций над этими значениями (IEEE Std 1320.2-1998). Другие определения:

  • Тип данных — класс данных, характеризуемый членами класса и операциями, которые могут быть к ним применены (ISO/IEC/IEEE 24765-2010).
  • Тип данных — категоризация абстрактного множества возможных значений, характеристик и набор операций для некоторого атрибута (IEEE Std 1320.2-1998).
  • Тип данных — категоризация аргументов операций над значениями, как правило, охватывающая как поведение, так и представление (ISO/IEC 19500-2:2003).
  • Тип данных — допустимое множество значений. Тип определяет возможные значения и их смысл, операции, а также способы хранения значений типа. Изучается теорией типов. Неотъемлемой частью большинства языков программирования являются системы типов, использующие типы для обеспечения той или иной степени типобезопасности."

-- Цитата из Википедии

Типы данных бывают нескольких разновидностей:

  1. Простые
  2. Составные

К простым относятся такие типы данных, как Int, Float, Double, Boolean, Char, String.

К составным можно отнести arrays, tuples, dictionaries, sets.

Стоит выделить опциональные типы. О них поговорим отдельно.

Вот таблица встроенных простых типов данных в язык Swift:

Тип данныхОбъем памятиДиапазон значений
1Int81 байтот -127 до 127
2UInt81 байтот 0 до 255
3Int162 байтаот -32768 до 32767
4UInt162 байтаот 0 до 65535
5Int324 байтаот -2147483648 до 2147483647
6UInt324 байтаот 0 до 4294967295
7Int648 байтот -9223372036854775808 до 9223372036854775807
8Unt648 байтот 0 до 18446744073709551615
9Float4 байтаот 1.2E-38 до 3.4E+38
10Double8 байтот 2.3E-308 до 1.7E+308
11Bool1 байтtrue/false
12String16 байтASCII
13Character16 байт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)