ответ Мартина совершенно прав.
Это другой вид, который более непосредственно отвечает на ваш вопрос.
В 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
возвращает необязательное значение перечисления, поскольку rawValue
строка может соответствовать любому значению перечисления.
Итак, что вы делаете в этот момент? Вы можете добавить !
заставить разворачивать значение:
self = Rank.fromRaw(rawValue)!
, но это будет вылетать, если вы пытались создать перечисление с недопустимым необработанным значением.
Вы могли бы относиться к одному из значений перечислений в по умолчанию и использовать ноль сливающихся оператор??
безопасно разворачивать его:
self = Rank.fromRaw(rawValue) ?? One
, который позволил бы избежать аварии, но, вероятно, приведет к неожиданным поведение со стороны вашей программы.
Что вы не можете сделать в Xcode 6.0, то есть init
вернуть необязательное значение. Эта возможность была добавлена в Xcode 6.1, и именно эта новая возможность позволила им изменить fromRaw()
на функцию в Xcode 6.0 на необязательный инициализатор в Xcode 6.1.
Знаете ли вы, что нормальные/несовместимые инициализаторы не поддерживаются или просто сломаны? http://stackoverflow.com/questions/28653484/swift-enums-normal-non-failable-initializers-not-supported-or-just-broken? Спасибо -c –
Проверено на Xcode 7.0 (beta 3) и 'Rank (rawValue:« One »)' правильно инициализирует член перечисления ... – Zorayr