Перечисления (enumerations) и структуры

enum используется для создания перечисления. Как классы и другие именованные типы, перечисления могут иметь ассоциированные с ними методы:

Напишите функцию, которая сравнивает два значения Rank, используя их «исходные» (toRaw()) значения

В примере выше, исходное значение перечисления имеет тип Int, поэтому мы указали только первое — Ace равное 1. Остальные были добавлены по очереди (2, 3, 4 и т.д.). Можно также использовать строки или дробные числа в качестве исходных значений перечисления.

Используйте init?(rawValue:) для перехода от исходного значения к значению перечисления и обратно.


Значения элементов перечисления — это настоящие значения, а не просто другой способ записи исходных значений. По сути, в случаях, где нет разумного исходного значения, его не обязательно подставлять:

Добавьте метод color к Suit, который возвращает «black» для Spades и Clubs и «red» для hearts и diamonds

Обратите внимание на то, как мы используем Hearts в двух разных случаях: когда присваиваем значение константе hearts, мы используем полное имя Suit.Hearts, т.к. константа не имеет определенного типа. Внутри switch’a, мы используем .Hearts, т.к. находимся внутри self. Можно использовать эту сокращенную форму всегда, когда тип значения уже известен.

Используйте struct, чтобы создать структуру. Структуры поддерживают многое из поведения классов, включая методы и инициализаторы. Одно из самых важных отличий между структурами и классами заключается в том, что структуры всегда копируются, когда передаются внутри кода, а классы — всегда передаются по ссылке.

Добавьте к Card метод, который создает полную колоду карт, с одной картой для каждой комбинации номера и рубашки

Объект перечисления может иметь значения, ассоциирующиеся с объектом. Объекты одного и того же члена перечисления могут иметь разные значения, ассоциированные с ними. Вы предоставляете ассоциированные значения, когда создаете объект. Ассоциированные значения и исходные значения различны: исходное значение члена перечисления одинаковы для всех его объектов, вы задаете его при определении перечисления. Например, рассмотрим случай запроса времени заката и рассвета с сервера. Сервер отвечает или информацией, или ошибкой.

Добавьте третий случай для ServerResponse к switch’у

Обратите внимание, как время заката и рассвета достаются из ServerResponse как пара значений, соответствующих случаям case.


Просмотренно: 1 812 раз