Set
из Swift взаимозаменяем с классом NSSet
из Foundation.
Int
, которое одинаково для всех равных объектов, которые эквивалентны: если a == b, то следовательно a.hashValue == b.hashValue.
String
, Int
, Double
и Bool
) хэшируемы по-умолчанию и могут быть использованы в качестве значений множества или ключей словаря. Кейсы перечислений без ассоциированных значений так же хэшируемы по-умолчанию. [О перечислениях будет сказано подробнее позднее. Когда-нибудь потом мы рассмотрим и создание собственных типов для множеств.]
Set<Element>
, где Element
- это тип, который может хранить множество. В отличие от массивов множества не имеют сокращённой формы записи.
var workers = Set<String>()
print("workers имеет тип Set<Character> со следующим количеством элементов: \(letters.count).")
// Выводит "workers имеет тип Set<Character> со следующим количеством элементов: 0."
Тип переменной letters
выведен как Set<String>
из типа конструктора.
workers.insert("Альфия")
// workers теперь содержит один элемент типа String
workers = []
// workers теперь пустое множество, но всё так же имеет тип Set<String>
favoriteGenres
для хранения значений типа String
:
var favoriteGenres: Set<String> = ["Рок", "Классика", "Неоклассика"]
// favoriteGenres был инициализирован тремя начальными значениями
Переменная favoriteGenres
объявлена как "множество значений типа String
", что записывается как Set<String>. Так как это конкретное множество задано как множество типа String
, то в нём можно хранить только строковые значения. Здесь множество favoriteGenres
инициализирован тремя значениями String
("Рок", "Классика"и "Неоклассика"), что записывается с помощью литерала массива.
favoriteGenres
объявлено в качестве переменной, а не константы, так как больше элементов может быть добавлено в него или убрано в примерах далее.
Set
должен быть явно указан. Однако ввиду типовыведения Swift Вы не обязаны указывать тип множества явно, если Вы инициализируете его с помощью литерала массива, содержащего значения одного типа. Инициализация favoriteGenres
в таком случае могла бы быть объявлена короче:
var favoriteGenres: Set = ["Рок", "Классика", "Неоклассика"]
Так как все значения в литерале массива имеют один тип, то Swift может вывести, что тип Set<String> - это корректный тип для использования с переменной favoriteGenres
.