Назад к вопросам
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 оптимизирует различные операции с коллекциями для производительности.