Swift - Перечисления

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

Функции перечисления

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

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

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

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

Синтаксис

Перечисления вводятся ключевым словом 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» присвоено переменной weekday.Sunday. Он сообщает компилятору, что тип данных, принадлежащий воскресенью, будет назначен последующим членам перечисления этого конкретного класса. После того, как тип данных члена перечисления определен, члены могут быть доступны путем передачи значений и дальнейших вычислений.

Перечисление с оператором 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)

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

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

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

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

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

Value of the Month is: 5.