HomeiOS DevelopmentSwift enum all values - The.Swift.Dev.

Swift enum all values – The.Swift.Dev.


From Swift 4.2 you may merely conform to the CaseIterable protocol, and you will get the allCases static property at no cost. If you’re studying this weblog submit in 2020, you need 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 focusing on under Swift 4.2, be happy to make use of the following technique.

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 you do not 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 sorts to the EnumCollection protocol and you’ll benefit from the model new instances technique and allValues property which can 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 })

Observe that the bottom kind of the enumeration must be Hashable, however that is not an enormous deal. Nevertheless this resolution seems like previous tense, identical to Swift 4, please think about upgrading your mission to Swift 5. Thanks for studying, bye! 👋

RELATED ARTICLES

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Most Popular

Recent Comments