Назад к вопросам
Junior
100
questionbank

Расскажи о коллекциях в Swift и их особенностях.

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

Swift предоставляет три основные встроенные коллекции: Массивы (Arrays), Множества (Sets) и Словари (Dictionaries). Все они мутабельны или немутабельны в зависимости от того, объявлены ли они с var или let, и являются универсальными типами (Generic Types), что позволяет хранить элементы любого типа, при условии, что все элементы в коллекции имеют один и тот же тип.

Массивы (Arrays)

  • Упорядоченная коллекция элементов одного типа.
  • Доступ к элементам осуществляется по индексу.
  • Могут содержать повторяющиеся элементы.
// Пустой массив строк
var strings: [String] = []

// Массив целых чисел
let numbers = [1, 2, 3, 4, 5]

// Добавление элемента
strings.append("Hello")

// Доступ по индексу
let firstElement = numbers[0] // 1

Множества (Sets)

  • Неупорядоченная коллекция уникальных элементов одного типа.
  • Элементы должны быть хешируемыми (т.е. соответствовать протоколу Hashable).
  • Используется для проверки уникальности элементов и быстрых поисков.
// Пустое множество целых чисел
var uniqueNumbers: Set<Int> = []

// Множество строк
let colors: Set = ["red", "green", "blue"]

// Вставка элемента
uniqueNumbers.insert(10) // Добавит только если числа 10 нет

// Проверка на наличие
let hasRed = colors.contains("red") // true

Словари (Dictionaries)

  • Неупорядоченная коллекция пар "ключ-значение", где ключи уникальны.
  • Ключи должны быть хешируемыми.
  • Используется для быстрого поиска значений по ключу.
// Пустой словарь с ключами-строками и значениями-целыми числами
var ages: [String: Int] = [:]

// Словарь с городами и их населением
let population = ["Moscow": 12_600_000, "Saint Petersburg": 5_400_000]

// Добавление или обновление значения по ключу
ages["Alice"] = 30

// Доступ к значению по ключу (возвращает Optional)
let moscowPopulation = population["Moscow"] // Optional(12600000)

// Удаление элемента
ages["Alice"] = nil

Особенности:

  • Типобезопасность: Swift требует, чтобы все элементы в коллекции были одного типа.
  • Ввод типа: Во многих случаях компилятор может определить тип элементов автоматически.
  • Итерация: Все коллекции поддерживают итерацию с использованием циклов for-in.
  • Протоколы: Коллекции соответствуют различным протоколам, таким как Collection, Sequence, MutableCollection. Set и ключи Dictionary требуют соответствия Hashable.
  • Эффективность: Swift оптимизирует различные операции с коллекциями для производительности.