English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Перечисления можно сказать, это тип данных, но это такой тип данных, который содержит только пользовательские специфические данные, это набор данных с общими характеристиками.
Перечисления в 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
можно использовать сокращенную синтаксис (.), чтобы установить его в другоеDaysofaWeek
worth
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。