Co próbuję zrobić, to utworzyć rozszerzenie protokołu, aby pobrać tablicę surowych wartości z wyliczenia. Na przykład, że mam następujące:Jak napisać rozszerzenie protokołu, aby uzyskać wszystkie wartości surowe z wyliczenia 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
}
}
Jak mogę wdrożyć EnumIteratable protokołu tak, że mogę zadzwonić TestType.getRawValues () i nie zwróci tablicę ciągów wszystkich surowych wartości enum?
Dzięki!
Może używając MirrorType? –
@MarceloFabri Lustro nie działa z kilku powodów, z których jednym jest to, że faktycznie potrzebujesz instancji enum, której próbuję uniknąć. Również wyliczenia nie mają właściwości :) – JonahGabriel