DevPrep

Все темы › Основные понятия программирования

Тип данных

Junior

Суть

Тип данных задаёт две вещи: множество допустимых значений и набор операций над ними. Int — целые от Int.min до Int.max плюс арифметика; Bool — два значения плюс &&, ||, !. Тип говорит компилятору, как интерпретировать байты в памяти и какие вызовы разрешены.

Система типов Swift

let count = 42            // Int — тип выведен компилятором
let ratio = 0.5           // Double
let flag = true           // Bool
let name = "Swift"        // String
let ch: Character = "S"
let maybe: Int? = nil     // Optional<Int>

let total = Double(count) * ratio   // преобразование только явное

Value vs reference — главное разделение

struct Money { var cents: Int }                       // value type
final class Account { var money = Money(cents: 0) }   // reference type

var m1 = Money(cents: 100)
var m2 = m1
m2.cents = 5
print(m1.cents, m2.cents)          // 100 5 — копия независима

let a1 = Account()
let a2 = a1
a2.money.cents = 7
print(a1.money.cents)              // 7 — обе ссылки на один объект

struct, enum, все стандартные коллекции и String — value types: присваивание копирует значение (для коллекций — лениво, copy-on-write). class, actor, замыкания — reference types: копируется ссылка.

Optional и абстрактные типы

Optional<T> — это enum с кейсами .none и .some(T): отсутствие значения выражено в типе, а не через «магический» nil или 0. Разворачивать — через if let, guard let, ??, ?.; ! только когда nil действительно невозможен.

Абстрактный тип данных — интерфейс без реализации. В Swift это protocol: Collection описывает операции, а Array и Set реализуют их по-разному.

Потренируйтесь перед собеседованием

В DevPrep эти ответы превращаются в задачи на минуту: что напечатает код, найди баг, пробное собеседование. По задаче в день.

Скачать DevPrep в App Store