Skip to content

Instantly share code, notes, and snippets.

@kazuhiro4949
Last active May 4, 2016 05:55
Show Gist options
  • Save kazuhiro4949/e7fcc2330b4bf44a93e917765a3298da to your computer and use it in GitHub Desktop.
Save kazuhiro4949/e7fcc2330b4bf44a93e917765a3298da to your computer and use it in GitHub Desktop.
It make enum return the array of cases
/**
adapt to enum which is Int Raw Value.
It make enum return the array of cases
#### Example
```
enum SomeEnum: IntRawValueEnumerable {
case AAA
case BBB
}
SomeEnum.allValues // => [.AAA, .BBB]
```
*/
protocol IntRawValueEnumerable {
init?(rawValue: Int)
var rawValue: Int { get }
}
extension IntRawValueEnumerable {
static var generator: AnyGenerator<Self> {
var index = start
return anyGenerator {
defer { index += step }
let next = Self(rawValue: index)
return next
}
}
static var allValues: [Self] {
return Array(generator)
}
var start: Int { return 0 }
var step: Int { return 1 }
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment