Skip to content

Instantly share code, notes, and snippets.

@sgr-ksmt
Created June 21, 2016 06:18
Show Gist options
  • Star 4 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save sgr-ksmt/5a0753676b7a851877b57ab2b94b56e4 to your computer and use it in GitHub Desktop.
Save sgr-ksmt/5a0753676b7a851877b57ab2b94b56e4 to your computer and use it in GitHub Desktop.
EnumEnumerable for Swift3.0
public protocol EnumEnumerable {
associatedtype Case = Self
}
public extension EnumEnumerable where Case: Hashable {
private static var iterator: AnyIterator<Case> {
var n = 0
return AnyIterator {
defer { n += 1 }
let next = withUnsafePointer(&n) { UnsafePointer<Case>($0).pointee }
return next.hashValue == n ? next : nil
}
}
public static func enumerate() -> EnumeratedSequence<AnySequence<Case>> {
return AnySequence(self.iterator).enumerated()
}
public static var cases: [Case] {
return Array(self.iterator)
}
public static var count: Int {
return self.cases.count
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment