Swift перечисляет несколько случаев с одинаковым значением
В C вы можете сделать свои перечисления
typedef enum _Bar {
A = 0,
B = 0,
C = 1
} Bar;
В быстрой я хочу сделать эквивалент. Однако компилятор жалуется, что он не уникален. Как я могу сказать, что я хочу, чтобы два случая имели одинаковое значение?
enum Bar : Int {
case A = 0
case B = 0 //Does not work
case C = 1
}
Ive попробовал
case A | B = 0
и
case A, B = 0
Но он, похоже, не работает так, как я этого хочу. Я ценю любую помощь.
Ответы
Ответ 1
Swift не поддерживает дублированные значения. (или "псевдонимы" семантически). Если вы не возражаете, вы можете имитировать это, используя что-то вроде этого.
enum Foo: Int {
case Bar = 0
static var Baz:Foo {
get {
return Bar
}
}
static var Jar:Foo {
get {
return Foo(rawValue: 0)!
}
}
}
Ответ 2
Swift не позволяет элементам enum
делиться значениями. Из документации по перечислениям под заголовком "Необработанные ценности" (выделение):
Необработанные значения могут быть строками, символами или любыми типами чисел с целыми числами или с плавающей запятой. Каждое необработанное значение должно быть уникальным в объявлении перечисления.
Ответ 3
Я не уверен, что ты сможешь. Из Apple взято следующее.
"В отличие от C и Objective-C членам Swift перечисления не присваивается целочисленное значение по умолчанию при их создании. В приведенном выше примере CompassPoints Север, Юг, Восток и Запад неявно не равны 0, 1, 2 и 3 Вместо этого различные члены перечисления являются полностью самостоятельными значениями, с явно определенным типом CompassPoint.
Отрывок из: Apple Inc. "Быстрый язык программирования". интерактивные книги. https://itunes.apple.com/us/book/swift-programming-language/id881256329?mt=11
Поскольку члены перечисления неявно не равны 0, 1 и т.д., компилятор рассматривает каждый как уникальное значение. Когда вы пытаетесь дублировать его, компилятор жалуется, потому что он уже создан.
Есть ли причина, по которой вам нужно дублировать значение?
Ответ 4
Вот еще один способ обойти это:
enum Animal {
case dog
case cat
case mouse
case zebra
var description: String {
switch self {
case .dog:
return "dog"
case .cat:
return "dog"
case .mouse:
return "dog"
case .zebra:
return "zebra"
default:
break
}
}
}
Ответ 5
Я сталкиваюсь с той же проблемой, что и для нескольких случаев с одинаковым значением. После этой проблемы я предпочел следующее решение с computed properties
enum
, которое появилось из этого сообщения.
![Swift enum properties]()