Created
October 3, 2017 03:36
-
-
Save lugearma/ebad7f4900c421a603e37ef7e546ae65 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
struct State { | |
let name: String | |
init(name: String) { | |
self.name = name | |
} | |
} | |
extension State: ExpressibleByStringLiteral { | |
public init(stringLiteral value: StringLiteralType) { | |
self.init(name: value) | |
} | |
public init(unicodeScalarLiteral value: String) { | |
self.init(name: value) | |
} | |
public init(extendedGraphemeClusterLiteral value: String) { | |
self.init(name: value) | |
} | |
} | |
extension State: Hashable { | |
var hashValue: Int { | |
return name.hashValue | |
} | |
static func == (lhs: State, rhs: State) -> Bool { | |
return lhs.name == rhs.name | |
} | |
} | |
protocol StateRepresentable { | |
var stateRepresentable: State { get } | |
} | |
// Example | |
enum TicketState { | |
case requested | |
case pending | |
case completed | |
} | |
extension TicketState: StateRepresentable { | |
var stateRepresentable: State { | |
switch self { | |
case .requested: return "requested_service" | |
case .pending: return "pending_service" | |
case .completed: return "completed_service" | |
} | |
} | |
} | |
let requestedState: TicketState = .requested | |
let pendingState: TicketState = .pending | |
if requestedState == pendingState { | |
print("✅") | |
} else { | |
print("❌") | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment