2015-02-27 2 views
0

Я разрабатываю контракт, и у нас есть сообщение, содержащее перечисление, но оно имеет только одно возможное значение. Для будущего доказательства я хотел убедиться, что я использовал перечисление, чтобы любые дополнительные значения, которые могли бы быть добавлены, не требовали бы большой работы. Так что я сделал это:Инициализировать Enum только одним случаем через rawValue

enum MyEnumeration: String { 
    case Case1 = "ValueFromContract" 
} 

И когда я читаю сообщение, я пытался инициализировать мой перечисление следующим образом:

let myEnum = MyEnumeration(rawValue: "ValueFromContract") 

MyEnum затем устанавливается на значение Some, которое, очевидно, не то, что я хотеть. Я разрабатываю Xcode 6.1.1, и это может быть не проблема в более поздних версиях Swift.

ответ

0

Видимо, вы не можете инициализировать rawValue, если перечисление имеет только один случай. Так что я должен был сделать это:

enum MyEnumeration: String { 
    case Case1 = "ValueFromContract" 
    case Unknown = "Unknown" 
} 

Тогда RawValue инициализатор работал просто отлично:

let myEnum = MyEnumeration(rawValue: "ValueFromContract") 

Не уверен, что, если его дизайн, но его хорошо знаю ...

0

Я м, не имеющие трудности при создании вашего перечисления с одним значением с Xcode 6.1.1:

enum MyEnumeration: String { 
    case Case1 = "ValueFromContract" 
} 

Обратите внимание, что MyEnumeration(rawValue: "ValueFromContract") возвращает необязательный параметр, поскольку строка, которую вы передаете, может быть недействительной rawValue для этого перечисления. Вам необходимо развернуть этот вариант, чтобы использовать его. Здесь я использую опциональный связывания:

if let myEnum = MyEnumeration(rawValue: "ValueFromContract") { 
    if myEnum == .Case1 { 
     println("\(myEnum.rawValue)") // This does print "ValueFromContract" 
    } 
} 
+0

Странно, возможно, есть что-то еще, предотвращающее его, но это не сработает для меня, если у меня не будет нескольких случаев. – Joe

0

Либо вы пишете

let myEnum = MyEnumeration(rawValue: "ValueFromContract")! 

или

let myEnum: MyEnumeration = .Case1 

Во всяком случае я не вижу особого смысла в перечислении только с одним значением.

Смежные вопросы