Swift enum all values – The.Swift.Dev.

Swift enum all values – The.Swift.Dev.



· 1 min learn


On this fast tutorial I will present you the right way to get all of the attainable values for a Swift enum sort with a generic resolution 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 spending a dime. If you’re studying this weblog publish in 2023, it’s best to positively 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 happy 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<Self>
    static var allValues: [Self] { get }
}

public extension EnumCollection {

    public static func instances() -> 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.instances())
    }
}

To any extent further 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 can include 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.instances() {
    print(weekday.rawValue)
}

print(Weekdays.allValues.map { $0.rawValue.capitalized })

Notice that the bottom sort of the enumeration must be Hashable, however that’s not a giant deal. Nevertheless this resolution appears like previous tense, similar to Swift 4, please contemplate upgrading your mission to the most recent model of Swift. 👋

Associated posts


· 6 min learn


Study every thing about logical varieties and the Boolean algebra utilizing the Swift programming language and a few primary math.


· 4 min learn


Learn to talk with API endpoints utilizing the model new SwiftHttp library, together with async / await assist.


· 9 min learn


The one and solely tutorial that you’re going to ever have to 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.

author avatar
roosho Senior Engineer (Technical Services)
I am Rakib Raihan RooSho, Jack of all IT Trades. You got it right. Good for nothing. I try a lot of things and fail more than that. That's how I learn. Whenever I succeed, I note that in my cookbook. Eventually, that became my blog. 
rooshohttps://www.roosho.com
I am Rakib Raihan RooSho, Jack of all IT Trades. You got it right. Good for nothing. I try a lot of things and fail more than that. That's how I learn. Whenever I succeed, I note that in my cookbook. Eventually, that became my blog. 

Related Articles

LEAVE A REPLY

Please enter your comment!
Please enter your name here


Latest Articles

author avatar
roosho Senior Engineer (Technical Services)
I am Rakib Raihan RooSho, Jack of all IT Trades. You got it right. Good for nothing. I try a lot of things and fail more than that. That's how I learn. Whenever I succeed, I note that in my cookbook. Eventually, that became my blog.