Ответ
Да, в Swift перечисления (enums) — это полноценные типы, поддерживающие добавление методов экземпляра и статических методов. Это ключевая особенность, отличающая Swift от многих других языков.
Пример с методами экземпляра:
enum AppState {
case active, background, suspended
// Метод экземпляра, работающий с текущим значением enum
func isForeground() -> Bool {
switch self {
case .active: return true
case .background, .suspended: return false
}
}
}
let state = AppState.active
print(state.isForeground()) // true
Пример со статическим методом (фабрика):
enum HTTPMethod: String {
case get = "GET", post = "POST", put = "PUT"
// Статический метод для создания из строки
static func from(string: String) -> HTTPMethod? {
return HTTPMethod(rawValue: string.uppercased())
}
}
let method = HTTPMethod.from(string: "post") // .post
Расширенные возможности:
-
Мутирующие методы: Если метод изменяет
self, его нужно пометитьmutating.enum TrafficLight { case red, yellow, green mutating func next() { switch self { case .red: self = .green case .green: self = .yellow case .yellow: self = .red } } } - Доступ к ассоциированным значениям: Методы могут извлекать и использовать связанные данные.
Добавление методов позволяет инкапсулировать логику, связанную с перечислением, делая код более организованным и безопасным.