tegi
2/11/2018 - 9:18 AM

Swift 3 - Enum utils

Swift 3 - Enum utils

//
// Based on https://quinesoft.de/2016/05/23/swift-enumerate-iterate-enum/
//
//  Usage:
//
//  public enum Pies: Int, EnumerableEnum {
//    case apple
//    case strawberry
//    case chicken
//  }
//
//  class MyClass {
//    func demoEnumerableEnum(){
//        for v in Pies.allValues() {
//            print(v)
//        }
//        print(Pies.count())
//    }
//  }

protocol EnumerableEnum: RawRepresentable {
    static func allValues() -> [Self]
    static func count() -> Int
}

extension EnumerableEnum where RawValue == Int {
    static func allValues() -> [Self] {
        var index = 0
        var array = [Self]()
        while let element = Self(rawValue: Int(index)) {
            array.append(element)
            index += 1
        }
        return array
    }
    static func count() -> Int {
        var index = 0
        while let _ = Self(rawValue: Int(index)) {
            index += 1
        }
        return index
    }
}