Swift Typ integer casten zu enum
Habe ich enum
Erklärung.
enum OP_CODE {
case addition
case substraction
case multiplication
case division
}
Und verwenden Sie es in eine Methode:
func performOperation(operation: OP_CODE) {
}
Wir alle wissen, dass, wie können wir nennen dies in der Regel
self.performOperation(OP_CODE.addition)
Aber wenn ich schon in einigen delegieren, wobei der integer-Wert ist nicht vorhersehbar, als wie Sie es nennen.
Beispiel:
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
self.delegate.performOperation(indexPath.row)
}
Hier, der Compiler wirft einen Fehler Int is not convertible to 'OP_CODE'
. Hier versuchte viele Permutationen. Aber nicht in der Lage, um es herauszufinden.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie den raw-Typ der enumeration
addition
wird eine raw-Wert0
,substraction
von1
, und so weiter.dann kann man
Weitere Infos hier: https://developer.apple.com/library/ios/documentation/swift/conceptual/Swift_Programming_Language/Enumerations.html#//apple_ref/doc/uid/TP40014097-CH12-XID_222
für ältere swift-Versionen
In Fall, dass Sie eine ältere version von swift, raw-Aufzählungen arbeiten ein bisschen anders. In Xcode < 6.1, müssen Sie
fromRaw()
statt einer failable Initialisierer:OP_CODE cannot be constructed it has no accessible initializers
- Können Sie bitte kurz.OP_CODE.fromRaw(indexPath.row)
, aber sollten Sie wirklich ein upgrade auf 6.1Können Sie raw-Werte in deinem enum:
und verwenden Sie die failable Initialisierer unter einen raw-Wert als input:
Beachten Sie, dass
code
ist optional, denn wenn der raw-Wert nicht anzeigen, um einen gültigen enum, der Initialisierung, wird nil zurückgegeben.In Ihrem Fall:
Außerdem, da eine Instanz von enum, erhalten Sie die zugehörige raw-Wert mit der
rawValue
Eigenschaft.Anmerkung: enums geändert haben ein bisschen in Xcode 6.1 - wenn Sie mit einer früheren version durchführen, Lesen @GabrielePetronella Antwort und die damit verbundenen Kommentare.