Skip to content

Instantly share code, notes, and snippets.

@xpqz
Created October 13, 2014 15:55
Show Gist options
  • Save xpqz/8071df7704e13f9d6f7a to your computer and use it in GitHub Desktop.
Save xpqz/8071df7704e13f9d6f7a to your computer and use it in GitHub Desktop.
import Foundation
enum Tech {
case UK(level: Int, modifier: Character)
init?(level: Int, modifier: Character) {
if (4..<7 ~= level) && (find(["a", "b", "c"] as [Character], modifier) != nil) {
self = .UK(level: level, modifier: modifier)
} else {
return nil
}
}
var description: String {
switch self {
case let UK(level, modifier):
return "\(level)\(modifier)"
default:
return "Bad UK tech grade"
}
}
}
enum Adjectival: Printable {
case Diff, VeryDifficult, Severe, HardSevere, VerySevere, HardVerySevere, Extreme(level: Int), Error
var description: String {
switch self {
case Diff:
return "D"
case VeryDifficult:
return "VDiff"
case Severe:
return "S"
case HardSevere:
return "HS"
case VerySevere:
return "VS"
case HardVerySevere:
return "HVS"
case let Extreme(level):
return "E\(level)"
default:
return "Bad grade"
}
}
}
enum Grade: Printable {
case UKTrad(adjectival: Adjectival, technical: Tech?)
var description: String {
switch self {
case let UKTrad(adjectival, technical):
if technical == nil {
return adjectival.description
}
return "\(adjectival.description) \(technical!.description)"
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment