Учебники

Свифт — Перечисления

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

Функциональность перечисления

Перечисление в Swift 4 также напоминает структуру C и Objective C.

  • Он объявлен в классе, и его значения доступны через экземпляр этого класса.

  • Начальное значение члена определяется с помощью инициализаторов enum.

  • Его функциональность также расширена за счет обеспечения стандартных функций протокола.

Он объявлен в классе, и его значения доступны через экземпляр этого класса.

Начальное значение члена определяется с помощью инициализаторов enum.

Его функциональность также расширена за счет обеспечения стандартных функций протокола.

Синтаксис

Перечисления вводятся с ключевым словом enum и помещают все их определения в пару фигурных скобок —

enum enumname {
   // enumeration values are described here
}

Например, вы можете определить перечисление для дней недели следующим образом:

enum DaysofaWeek {
   case Sunday
   case Monday
   ---
   case Saturday
}

пример

Live Demo

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

Live Demo

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}
Значения создаются на основе константы или переменной Предварительно заполненные значения
Варьируется при объявлении каждый раз Значение для члена такое же

Перечисление со связанными значениями

Live Demo

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)

Теперь регистр коммутатора будет печатать имя студента, если этот блок регистра будет выполнен, иначе он будет печатать метки, закрепленные за студентом. Если оба условия не выполняются, будет выполнен блок по умолчанию.

Перечисление с необработанными значениями

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

Live Demo

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).")

Когда мы запускаем вышеуказанную программу, используя площадку, мы получаем следующий результат —