Martin Antwort Die fromRaw()
und toRaw()
Verfahren wurden von a (failable) initializer und eine rawValue
Eigenschaft ersetzt ist völlig richtig.
Hier ist eine andere Ansicht, die Ihre Frage direkter beantwortet.
In Xcode 6.0 hat eine enum
keine rawValue
Eigenschaft. rawValue
wurde in Xcode 6.1 hinzugefügt, aber beachten Sie, dass es sich um eine schreibgeschützte berechnete Eigenschaft handelt, so dass Sie sie auch nicht in Xcode 6.1 zuweisen können.
In Xcode 6.1 ist es nicht notwendig, einen Initialisierer zu implementieren, der eine rawValue
übernimmt, weil diese bereits von der Sprache nativ bereitgestellt wurde. Wenn Sie dieses Verhalten in Xcode 6.0 zu imitieren versuchen, dann könnten Sie versuchen, so etwas wie:
enum Rank: String
{
case One = "One", Two="Two"
init(rawValue : String)
{
self = Rank.fromRaw(rawValue)
}
}
aber das Problem dabei ist, dass fromRaw
gibt einen optionalen ENUM-Wert, da die rawValue
Zeichenkette an einem Enum-Wert entsprechen könnte.
Was machen Sie an dieser Stelle? Sie könnten einen !
hinzufügen, um den Wert zu zwingen auszupacken:
self = Rank.fromRaw(rawValue)!
aber dies würde abstürzen, wenn Sie eine Enumeration mit einem ungültigen Rohwert zu schaffen versucht.
Sie eine der ENUM-Werte als und eine Standard-Behandlung könnte die nil koaleszierende Operator??
verwenden, um es sicher auspacken:
self = Rank.fromRaw(rawValue) ?? One
, die einen Absturz vermeiden würde, aber wahrscheinlich zu unerwarteten führen würde Verhalten seitens Ihres Programms.
Was Sie in Xcode 6.0 nicht tun können, ist die init
Rückgabe eines optionalen Wertes. Diese Funktion wurde in Xcode 6 hinzugefügt.1 und es war genau diese neue Fähigkeit, die es ihnen ermöglichte, fromRaw()
von einer Funktion in Xcode 6.0 zu einem optionalen Initializer in Xcode 6.1 zu ändern.
Wissen Sie, ob normale/nicht failable Initialisierer nicht unterstützt werden oder nur kaputt sind? http://stackoverflow.com/questions/28653484/swift-enums-normal-non-failable-initializers-not-supported-or-just-broken? Danke -c –
Checked auf Xcode 7.0 (Beta 3) und 'Rank (rawValue:" One ")' korrekt initialisiert das Enum-Member ... – Zorayr