We sometimes encounter the situation that a server will add over time new 
values to existing `enums`.

e.g. in the `enum Animal` example `cat` gets added.

To not break existing clients, we often use something like this:

    enum Animal: Int, Codable {
        case unknown = 0
        case chicken = 1, dog, turkey, cow
    }

and all cases which are unknown (like a new `cat` case) will map to `unknown` 
instead.

I could probably do this by manually implementing `init(from:)`:
        
    public init(from decoder: Decoder) throws {
        // Decodes as a single value; no keys.
        let intValue = try decoder.singleValueContainer().decode(Int.self)
        if let value = Self(rawValue: intValue) {
            self = value
        } else {
            self = .unknown
        }
    }

But maybe there is a better way envisioned by the authors of SE-0166?

Cheers
Marc


_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to