Ответ 1
Ответ Мартина совершенно прав.
Вот другое представление, которое более непосредственно отвечает на ваш вопрос.
В Xcode 6.0 enum
не имеет свойства rawValue
. rawValue
был добавлен в Xcode 6.1, но обратите внимание, что это вычисляемое свойство только для чтения, поэтому вы также не можете назначать его в Xcode 6.1.
В Xcode 6.1 нет необходимости реализовывать инициализатор, который принимает rawValue
, потому что это уже было предоставлено языком. Если вы пытались подражать этому поведению в Xcode 6.0, вы можете попробовать что-то вроде:
enum Rank: String
{
case One = "One", Two="Two"
init(rawValue : String)
{
self = Rank.fromRaw(rawValue)
}
}
но проблема заключается в том, что fromRaw
возвращает необязательное значение enum, потому что строка rawValue
может соответствовать любому значению перечисления.
Итак, что вы делаете в этот момент? Вы можете добавить !
, чтобы заставить разворачивать значение:
self = Rank.fromRaw(rawValue)!
но это приведет к сбою, если вы попытаетесь создать перечисление с недопустимым исходным значением.
Вы можете рассматривать одно из значений перечисления как значение по умолчанию и использовать оператор объединения nil ??
для безопасного его развертывания:
self = Rank.fromRaw(rawValue) ?? One
который позволит избежать сбоя, но, вероятно, приведет к неожиданному поведению со стороны вашей программы.
То, что вы не можете сделать в Xcode 6.0, это вернуть init
необязательное значение. Эта возможность была добавлена в Xcode 6.1, и именно эта новая возможность позволила им изменить fromRaw()
из функции в Xcode 6.0 на необязательный инициализатор в Xcode 6.1.