From Swift 4.2 you may merely conform to the CaseIterable
protocol, and you will get the allCases
static property free of charge. If you’re studying this weblog submit in 2023, you must undoubtedly improve your Swift language model to the newest. 🎉
enum ABC: String, CaseIterable {
case a, b, c
}
print(ABC.allCases.map { $0.rawValue })
If you’re concentrating on under Swift 4.2, be at liberty to make use of the next methodology.
The EnumCollection protocol strategy
First we have to outline a brand new EnumCollection protocol, after which we’ll make a protocol extension on it, so you do not have to write down an excessive amount of code in any respect.
public protocol EnumCollection: Hashable {
static func circumstances() -> AnySequence<Self>
static var allValues: [Self] { get }
}
public extension EnumCollection {
public static func circumstances() -> AnySequence<Self> {
return AnySequence { () -> AnyIterator<Self> in
var uncooked = 0
return AnyIterator {
let present: Self = withUnsafePointer(to: &uncooked) { $0.withMemoryRebound(to: self, capability: 1) { $0.pointee } }
guard present.hashValue == uncooked else {
return nil
}
uncooked += 1
return present
}
}
}
public static var allValues: [Self] {
return Array(self.circumstances())
}
}
Any longer you solely have to adapt your enum
sorts to the EnumCollection protocol and you’ll benefit from the model new circumstances methodology and allValues
property which is able to comprise all of the attainable values for that given enumeration.
enum Weekdays: String, EnumCollection {
case sunday, monday, tuesday, wednesday, thursday, friday, saturday
}
for weekday in Weekdays.circumstances() {
print(weekday.rawValue)
}
print(Weekdays.allValues.map { $0.rawValue.capitalized })
Observe that the bottom sort of the enumeration must be Hashable
, however that is not an enormous deal. Nonetheless this answer seems like previous tense, identical to Swift 4, please take into account upgrading your mission to the newest model of Swift. 👋