English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Основной учебник Swift

Операторы Swift

Swift управление потоком

Swift коллекции

Swift функции

Swift продвинутый

Списки (Enum) в Swift

Перечисления можно сказать, это тип данных, но это такой тип данных, который содержит только пользовательские специфические данные, это набор данных с общими характеристиками.

Перечисления в Swift подобны структурам в Objective C и C, функции перечислений:

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

  • Перечисления также могут определять конструкторы (initializers) для предоставления начальных значений членов; их функциональность можно расширить на основе исходного выполнения.

  • можно следовать протоколам (protocols) для предоставления стандартных функций.

синтаксис

В Swift для создания перечислений используется ключевое слово enum, и их полная определение содержится в паре фигурных скобок:

enum enumname {
   // Определение перечисления находится здесь
{}

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

import Cocoa
// Определение перечисления
enum DaysOfWeek {
    case .Sunday
    case .Monday
    case .TUESDAY
    case .WEDNESDAY
    case .THURSDAY
    case .FRIDAY
    case .Saturday
{}
var weekDay = DaysofaWeek.THURSDAY
weekDay = .THURSDAY
switch weekDay
{
case .Sunday:
    print("воскресенье")
case .Monday:
    print("понедельник")
case .TUESDAY:
    print("вторник")
case .WEDNESDAY:
    print("среда")
case .THURSDAY:
    print("четверг")
case .FRIDAY:
    print("пятница")
case .Saturday:
    print("четверг")
{}

Результат выполнения программы выше:

четверг

определенных в перечислении значений (например Sunday,Monday,……иSaturdayявляется частью этого перечислениячленское значение(иличлен).caseключевое слово указывает на то, что будет определено новое значение члена строки.

Внимание: в отличие от C и Objective-C, члены枚ерации в Swift не получают по умолчанию значения целого типа при создании.DaysofaWeekв примере,Sunday,Monday,……иSaturdayне будет автоматически присвоено0,1,……и6. Напротив, сами члены枚ерации уже имеют полные значения, которые уже четко определеныDaysofaWeekтип.

var weekDay = DaysofaWeek.THURSDAY

weekDayтип может быть выведен вDaysofaWeekвозможное значение, которое было выведено при инициализации. Как толькоweekDayявляетсяDaysofaWeekможно использовать сокращенную синтаксис (.), чтобы установить его в другоеDaysofaWeekworth

var weekDay = .THURSDAY

whenweekDayЕсли тип известен, при повторном присвоении можно опустить имя枚ерации. Использование значений с явным типом в枚ерации улучшает читаемость кода.

枚举 можно разделить на связанные значения и исходные значения.

Разница между связанными значениями и исходными значениями

Связанные значенияЗначение по умолчанию
Разные данные типыОднородные данные типы
Пример: enum {10, 0.8, "Hello"}Пример: enum {10, 35, 50}
Создание значений основано на константах или переменныхПредварительно заполненные значения
Связанные значения устанавливаются при создании новых констант или переменных на основе членов枚ерации, и каждый раз, когда вы так делаете, их значения могут быть разными.Исходные значения всегда одинаковы

Связанные значения

В данном примере мы определяем тип枚ерации Student, который может быть именем Name (String) или связанным значением Mark (Int, Int, Int).

import Cocoa
enum Student{
    case .Name(String)
    case .Mark(Int, Int, Int)
{}
var studDetails = Student.Name("w3codebox")
var studMarks = Student.Mark(98, 97, 95)
switch studMarks {
case .Name(let studName):
    print("Имя студента: \(studName).")
case .Mark(let Mark1, let Mark2, let Mark3):
    print("Оценки студентов: \(Mark1), \(Mark2), \(Mark3).")
{}

Результат выполнения программы выше:

Оценки студентов: 98, 97, 95.

Значение по умолчанию

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

В перечислении с целыми числами в качестве значения по умолчанию не нужно явно присваивать каждому члену значение, Swift автоматически присваивает вам значение.

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

import Cocoa
enum Month: Int {
    case January = 1, February, March, April, May, June, July, August, September, October, November, December
{}
let yearMonth = Month.May.rawValue
print("Численный месяц: \(yearMonth)。")

Результат выполнения программы выше:

Численный месяц: 5。