la risposta di Martin ha perfettamente ragione.
Ecco un'altra vista che risponde più direttamente alla tua domanda.
In Xcode 6.0, un enum
non ha una proprietà rawValue
. rawValue
è stato aggiunto in Xcode 6.1, ma si noti che è una proprietà di sola lettura , quindi non è possibile assegnarlo anche in Xcode 6.1.
In Xcode 6.1, non è necessario implementare un inizializzatore che prende uno rawValue
perché è già stato fornito in modo nativo dalla lingua. Se si stava tentando di imitare il comportamento in Xcode 6.0, allora si potrebbe provare qualcosa di simile:
enum Rank: String
{
case One = "One", Two="Two"
init(rawValue : String)
{
self = Rank.fromRaw(rawValue)
}
}
ma il problema con questo è che fromRaw
restituisce un valore enum facoltativa perché la stringa rawValue
potrebbe corrispondere a qualsiasi valore enum.
Quindi cosa fai a questo punto? Si potrebbe aggiungere un !
per forzare scartare il valore:
self = Rank.fromRaw(rawValue)!
ma questo potrebbe andare in crash se si è tentato di creare un enum con un valore grezzo non valido.
Si potrebbe trattare uno dei valori enum come un default e utilizzare il nil coalescenza operatore??
a scartare tranquillamente:
self = Rank.fromRaw(rawValue) ?? One
che eviterebbe un incidente, ma probabilmente portare a inaspettati comportamento da parte del tuo programma.
Ciò che non è possibile fare in Xcode 6.0 è il init
restituire un valore facoltativo. Questa funzionalità è stata aggiunta in Xcode 6.1 ed era esattamente questa nuova funzionalità che permetteva loro di cambiare fromRaw()
da una funzione in Xcode 6.0 a un inizializzatore opzionale in Xcode 6.1.
Sapete se gli inizializzatori normali/non disponibili non sono supportati o sono solo guasti? http://stackoverflow.com/questions/28653484/swift-enums-normal-non-failable-initializers-not-supported-or-just-broken? Grazie -c –
Controllato su Xcode 7.0 (beta 3), e 'Rank (rawValue:" One ")' inizializza correttamente il membro enum ... – Zorayr