Перечисление — это определяемый пользователем тип данных, который состоит из набора связанных значений. Ключевое слово enum используется для определения перечислимого типа данных.
Функциональность перечисления
Перечисление в Swift 4 также напоминает структуру C и Objective C.
-
Он объявлен в классе, и его значения доступны через экземпляр этого класса.
-
Начальное значение члена определяется с помощью инициализаторов enum.
-
Его функциональность также расширена за счет обеспечения стандартных функций протокола.
Он объявлен в классе, и его значения доступны через экземпляр этого класса.
Начальное значение члена определяется с помощью инициализаторов enum.
Его функциональность также расширена за счет обеспечения стандартных функций протокола.
Синтаксис
Перечисления вводятся с ключевым словом enum и помещают все их определения в пару фигурных скобок —
enum enumname { // enumeration values are described here }
Например, вы можете определить перечисление для дней недели следующим образом:
enum DaysofaWeek { case Sunday case Monday --- case Saturday }
пример
enum names { case Swift case Closures } var lang = names.Closures lang = .Closures switch lang { case .Swift: print("Welcome to Swift") case .Closures: print("Welcome to Closures") default: print("Introduction") }
Когда мы запускаем вышеуказанную программу, используя площадку, мы получаем следующий результат —
Welcome to Closures
Перечисление Swift 4 не присваивает своим членам значение по умолчанию, такое как C и Objective C. Вместо этого члены явно определяются своими именами перечисления. Имя перечисления должно начинаться с заглавной буквы (например, enum DaysofaWeek).
var weekDay = DaysofaWeek.Sunday
Здесь имя перечисления ‘DaysofaWeek’ присваивается переменной дней недели. Воскресенье. Он сообщает компилятору, что тип данных, относящийся к Sunday, будет присвоен последующим членам enum этого конкретного класса. Как только тип данных элемента enum определен, к членам можно получить доступ путем передачи значений и дальнейших вычислений.
Перечисление с оператором Switch
Оператор Swift 4 «Switch» также следует за множественным выбором. Доступ к одной переменной возможен в определенное время на основе указанного условия. Регистр по умолчанию в операторе switch используется для отлова неуказанных случаев.
enum Climate { case India case America case Africa case Australia } var season = Climate.America season = .America switch season { case .India: print("Climate is Hot") case .America: print("Climate is Cold") case .Africa: print("Climate is Moderate") case .Australia: print("Climate is Rainy") }
Когда мы запускаем вышеуказанную программу, используя площадку, мы получаем следующий результат —
Climate is Cold
Сначала программа определяет Climate в качестве имени перечисления. Затем его члены, такие как «Индия», «Америка», «Африка» и «Австралия», объявляются принадлежащими к классу «Климат». Теперь член America назначен переменной сезона. Кроме того, Switch case увидит значения, соответствующие .America, и перейдет к этому конкретному оператору. Вывод будет отображаться как «Климат холодный». Точно так же все члены могут быть доступны через операторы switch. Если условие не выполняется, по умолчанию выводится «Климат не предсказуем».
Перечисление может быть далее классифицировано в связанные значения и необработанные значения.
Разница между ассоциированными и необработанными ценностями
Связанные ценности | Сырые ценности |
Различные типы данных | Те же типы данных |
Пример: enum {10,0.8, «Hello»} | Пример: enum {10,35,50} |
Значения создаются на основе константы или переменной | Предварительно заполненные значения |
Варьируется при объявлении каждый раз | Значение для члена такое же |
Перечисление со связанными значениями
enum Student { case Name(String) case Mark(Int,Int,Int) } var studDetails = Student.Name("Swift 4") var studMarks = Student.Mark(98,97,95) switch studMarks { case .Name(let studName): print("Student name is: \(studName).") case .Mark(let Mark1, let Mark2, let Mark3): print("Student Marks are: \(Mark1),\(Mark2),\(Mark3).") }
Когда мы запускаем вышеуказанную программу, используя площадку, мы получаем следующий результат —
Student Marks are: 98,97,95.
Рассмотрим, например, для доступа к имени ученика и отметкам, закрепленным в трех предметах. Имя перечисления объявляется как ученик, и члены, присутствующие в классе перечисления, являются именами, принадлежащими строковому типу данных, метки представляются как mark1, mark2 и mark3 типа данных Integer. Чтобы получить доступ к имени студента или оценкам, которые он набрал
var studDetails = Student.Name("Swift") var studMarks = Student.Mark(98,97,95)
Теперь регистр коммутатора будет печатать имя студента, если этот блок регистра будет выполнен, иначе он будет печатать метки, закрепленные за студентом. Если оба условия не выполняются, будет выполнен блок по умолчанию.
Перечисление с необработанными значениями
Необработанные значения могут быть строками, символами или любыми типами целых чисел или чисел с плавающей точкой. Каждое необработанное значение должно быть уникальным в объявлении перечисления. Когда целые числа используются для необработанных значений, они автоматически увеличиваются, если не указано значение для некоторых членов перечисления.
enum Month: Int { case January = 1, February, March, April, May, June, July, August, September, October, November, December } let yearMonth = Month.May.rawValue print("Value of the Month is: \(yearMonth).")
Когда мы запускаем вышеуказанную программу, используя площадку, мы получаем следующий результат —