Основы Swift / 5.6. Словари 1 - Основы


Видео


Словари
Словарь хранит ассоциативные пары между ключами одного типа и значениями другого, но так же одного между собой типа, в коллекции без заданного порядка. Каждое значение ассоциировано с уникальным ключом, который выполняет роль его идентификатора в словаре. В отличие от элементов массива элементы словаря не имеют определённого порядка. Вы можете использовать словарь, когда Вам нужно соединить элементы на основе их идентификаторов, как и словарь в реальном мире.
Dictionary и NSDictionary
Тип Dictionary из Swift взаимозаменяем с классом NSDictionary из Foundation.
Короткий синтаксис для словарей
Тип словаря в Swift записывается в полном виде как Dictionary< Key, Value>, где Key - это тип значения, который может быть использован в качестве ключа словаря, а Value - это тип значения, которое словарь может хранить для этих ключей.

Тип Key для словаря должен реализовывать протокол Hashable, как и тип значения множества.

Вы можете также использовать короткую форму записи словаря в качестве [Key: Value]. И хотя обе формы функционально идентичны, но сокращённая форма предпочтительнее и используется в течение этого руководства при описании словарей.

Как и в случае массивов Вы можете создать пустой Dictionary определённого типа с помощью синтаксиса конструктора:
@{5.6\1}
                    
var namesOfIntegers = [Int: String]()
// namesOfIntegers является пустым словарём типа [Int: String]
                    
                
В этом примере создаётся пустой словарь типа [Int: String] для хранения человекопонятных имён для целых чисел. Его ключи имеют тип Int, а значения - тип String.
Краткая форма пустого словаря
Если контекст уже предоставляет информацию о типе, Вы можете создать пустой словарь с помощью литерала пустого словаря, который записывается как [:] (двоеточие внутри пары квадратных скобок):
@{5.6\2}
                    
namesOfIntegers[16] = "шестнадцать"
// namesOfIntegers теперь содержит 1 пару ключ-значение
namesOfIntegers = [:]
// namesOfIntegers теперь опять пустой словарь типа [Int: String]
                    
                
Создания словаря с помощью литерала словаря
Вы так же можете создать словарь с помощью литерала словаря, который имеет схожий синтаксис с литералом массива, что Вы видели ранее. Литерал словаря - это более короткий способ для написания одной или более пары ключ-значение в качестве коллекции типа Dictionary.

Пара ключ-значение - это комбинация из ключа и значения. В словарном литерале ключ и значение в каждой паре ключ-значение разделены двоеточием. Пары ключ-значение записываются в список с разделением через запятые, окружённые парой квадратных скобок:
@{5.6\3}
                    
var airports: [String: String] = ["YYZ": "Toronto Pearson", "DUB": "Dublin"]
                    
                
Пример демонстрирует словарь для хранения имён международных аэропортов. В этом словаре ключи являются трёхбуквенным кодом международной ассоциации воздушного транспорта, а значения - названиями аэропортов.

Словарь airports объявляется с типом [String: String]. что значит "Dictionary, чьи ключи имеют тип String и чьи значения так же имеют тип String".

Словарь airports объявлен в качестве переменной (с ключевым словом var), а не константы (с ключевым словом let), так как больше аэропортов может быть добавлено в словарь в примерах далее.

Словарь airports инициализирован с помощью литерала словаря, содержащего две пары ключ-значение. Первая пара имеет ключ "YYZ" и значение "Toronto Pearson". Вторая пара имеет ключ "DUB" и значение "Dublin".

Этот словарный литерал содержит две пары типа String: String. Этот тип ключ-значение совпадает с типом объявления временной airports (словарь с ключами только типа String и значениями только типа String), так что присваивание словарного литерала разрешено в качестве способа инициализировать словарь airports двумя изначальными значениями.
Выведение типов
Как и с массивами, Вам не нужно указывать тип словаря, если Вы инициализируете его со словарным литералом, чьи ключи и значения имеют согласующиеся типы. Инициализация airports может быть написана сокращённой форме:
@{5.6\4}
                    var airports = ["YYZ": "Toronto Pearson", "DUB": "Dublin"]
                    
                
Так как все ключи в литерале имеют один и тот же тип, и так же, так как все значениями имеют один и тот же тип, Swift может вывести, что [String: String] - это корректный тип для использования со словарём airports.