【发布时间】:2015-11-07 23:32:44
【问题描述】:
我要做的是创建一个协议扩展来从枚举中获取一组原始值。例如说我有以下内容:
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
}
}
如何实现协议 EnumIteratable 以便我可以调用 TestType.getRawValues() 并让它返回一个包含所有原始枚举值的字符串数组?
谢谢!
【问题讨论】:
-
也许使用 MirrorType?
-
@MarceloFabri 镜像不起作用有几个原因,其中一个原因是您实际上需要一个枚举实例,我试图避免这种情况。此外,枚举没有属性:)
标签: swift generics enums protocols generator