· 1 min learn
On this fast tutorial I am going to present you tips on how to get all of the potential values for a Swift enum kind with a generic answer written in Swift.
From Swift 4.2 you may merely conform to the CaseIterable
protocol, and also you’ll get the allCases
static property without cost. If you’re studying this weblog submit in 2023, you must undoubtedly improve your Swift language model to the most recent. 🎉
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 method
First we have to outline a brand new EnumCollection protocol, after which we’ll make a protocol extension on it, so that you don’t have to put in writing an excessive amount of code in any respect.
public protocol EnumCollection: Hashable {
static func instances() -> AnySequence
static var allValues: [Self] { get }
}
public extension EnumCollection {
public static func instances() -> AnySequence {
return AnySequence { () -> AnyIterator 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.instances())
}
}
Any more you solely have to adapt your enum
varieties to the EnumCollection protocol and you’ll benefit from the model new instances methodology and allValues
property which is able to comprise all of the potential values for that given enumeration.
enum Weekdays: String, EnumCollection {
case sunday, monday, tuesday, wednesday, thursday, friday, saturday
}
for weekday in Weekdays.instances() {
print(weekday.rawValue)
}
print(Weekdays.allValues.map { $0.rawValue.capitalized })
Notice that the bottom kind of the enumeration must be Hashable
, however that’s not a giant deal. Nonetheless this answer appears like previous tense, similar to Swift 4, please think about upgrading your challenge to the most recent model of Swift. 👋
Associated posts
· 6 min learn
Study the whole lot about logical varieties and the Boolean algebra utilizing the Swift programming language and a few fundamental math.
· 4 min learn
Discover ways to talk with API endpoints utilizing the model new SwiftHttp library, together with async / await help.
· 9 min learn
The one and solely tutorial that you’re going to ever must study greater order features like: map, flatMap, compactMap, scale back, filter and extra.
· 5 min learn
Study the very fundamentals about protocols, existentials, opaque varieties and the way they’re associated to generic programming in Swift.