Quello che sto cercando di fare è creare un'estensione di protocollo per recuperare una matrice di valori non elaborati da un enum. Per esempio dire che ho il seguente:Come posso scrivere un'estensione di protocollo per ottenere tutti i valori raw da un enum Swift
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
}
}
Come posso implementare l'EnumIteratable protocollo in modo che io possa chiamare TestType.getRawValues () e farlo ritornare un array di stringhe di tutti i valori enum prime?
Grazie!
Forse usando MirrorType? –
@MarceloFabri Un mirror non funzionerà per diversi motivi, uno dei quali è che hai effettivamente bisogno di un'istanza dell'enumerazione, che sto cercando di evitare. Inoltre, le enumerazioni non hanno proprietà :) – JonahGabriel