If you've written enums before, you've no doubt noticed the irritating
phenomenon of `switch self` being absolutely everywhere. I first discovered
this in some of my very first Swift code, code so old we were still using the
`T[]` shorthand syntax:
enum Suit: Int {
case Hearts, Spades, Diamonds, Clubs
static var all: Suit[] { return [ Hearts, Spades, Diamonds, Clubs ] }
var description: String {
switch(self) {
case .Hearts:
return "♥️"
case .Spades:
return "♠️"
case .Diamonds:
return "♦️"
case .Clubs:
return "♣️"
}
}
var isRed: Bool {
switch(self) {
case .Hearts, .Diamonds:
return true
case .Spades, .Clubs:
return false
}
}
}
It would be nice if we could somehow eliminate that. I have two suggestions:
* Implicitly switch on `self` at the top level of a function or accessor (or at
least an enum one with top-level `case` statements).
enum Suit: Int {
case Hearts, Spades, Diamonds, Clubs
static var all = [ Hearts, Spades, Diamonds, Clubs ]
var description: String {
case .Hearts:
return "♥️"
case .Spades:
return "♠️"
case .Diamonds:
return "♦️"
case .Clubs:
return "♣️"
}
var isRed: Bool {
case .Hearts, .Diamonds:
return true
case .Spades, .Clubs:
return false
}
}
* Allow you to attach member definitions to particular cases. It would be an
error if they didn't all define the same members, unless there was a top-level
catchall.
enum Suit: Int {
var isRed: Bool { return false }
case Hearts {
let description: String { return "♥️" }
let isRed: Bool { return true }
}
case Spades {
let description: String { return "♠️" }
}
case Diamonds {
let description: String { return "♦️" }
let isRed: Bool { return true }
}
case Clubs {
let description: String { return "♣️" }
}
static var all = [ Hearts, Spades, Diamonds, Clubs ]
}
Any thoughts? This has, to be honest, bothered me since approximately the third
day I used the language; I'd love to address it sooner or later.
--
Brent Royal-Gordon
Architechies
_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution