Was ich versuche zu tun, ist eine Protokollerweiterung zu erstellen, um ein Array von Rohwerten aus einem Enum zu holen. Zum Beispiel sagen, habe ich folgendes:Wie kann ich eine Protokollerweiterung schreiben, um alle rawValues von einem Swift enum zu bekommen
enum TestType: String, EnumIteratable {
case unitTest = "Unit Test"
case uiTest = "UI Test"
}
class EnumIterator: NSObject {
class func iterateEnum<T: Hashable>(_: T.Type) -> AnyGenerator<T> {
var i = 0
return anyGenerator {
let next = withUnsafePointer(&i) { UnsafePointer<T>($0).memory }
return next.hashValue == i++ ? next : nil
}
}
class func getValues<T: Hashable>(_: T.Type) -> [T] {
let iterator = self.iterateEnum(T)
var returnArray = [T]()
for val in iterator {
returnArray.append(val)
}
return returnArray
}
}
Wie kann ich das Protokoll EnumIteratable implementieren, so dass ich TestType.getRawValues () aufrufen können und haben es ein String-Array aller rohen ENUM-Werte zurückgeben?
Danke!
Vielleicht mit MirrorType? –
@MarceloFabri Eine Spiegelung funktioniert aus verschiedenen Gründen nicht, eine davon ist, dass Sie tatsächlich eine Instanz der Enumeration benötigen, die ich vermeiden möchte. Enums haben auch keine Eigenschaften :) – JonahGabriel