[swift-evolution] Enums and Source Compatibility

David Sweeris davesweeris at mac.com
Thu Sep 28 19:38:34 CDT 2017


> On Sep 28, 2017, at 4:15 PM, Goffredo Marocchi via swift-evolution <swift-evolution at swift.org> wrote:
> 
> Agreed, I am not seeing this change doing so much good because maybe it could prevent issues Library writers or developers updating libraries without checking things... not trying to be rude and/or non empathetic, but exhaustive enums never struck me as a bad thing and the reasons why they could be bad very quickly leads one to think “maybe you should not have been switching on enums there...”.

You're suggesting that we use enums when something is known to be exhaustive, and then something like this when it's not?

struct SomeOptionSetOrWhatever : Equatable, RawRepresentable {
	public static func == (lhs: SomeOptionSetOrWhatever, rhs: SomeOptionSetOrWhatever) -> Bool { return lhs.value == rhs.value 	}
	public static let optionOne = SomeOptionSetOrWhatever(privateInit: 1)
	public static let optionTwo = SomeOptionSetOrWhatever(privateInit: 2)
	private let value: Int
	private init(privateInit value: Int) { self.value = value }
	public init?(rawValue: Int) {
		switch rawValue {
		case 1: self = .optionOne
		case 2: self = .optionTwo
		case _: value = 0; return nil
		}
	}
	public var rawValue: Int { return value	}
}

func foo(x: SomeOptionSetOrWhatever) {
	switch x {
	case .optionOne: print("first option")
	case .optionTwo: print("second option")
	default: break //without this line, it's a "switch much be exhaustive" error
	}
}

- Dave Sweeris
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20170928/4e7d0f1e/attachment.html>


More information about the swift-evolution mailing list