Skip to content

Instantly share code, notes, and snippets.

@lugearma
Created October 3, 2017 03:36
Show Gist options
  • Save lugearma/ebad7f4900c421a603e37ef7e546ae65 to your computer and use it in GitHub Desktop.
Save lugearma/ebad7f4900c421a603e37ef7e546ae65 to your computer and use it in GitHub Desktop.
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