I have a situation in my client-server app where I have to send my network strength to server and also receive other clients' strength from server.
So I created enum as:
enum NetworkType: Int {
case none, gprs, two_g, three_g, four_g, lte, wifi
}
extension NetworkType: Comparable {
public static func < (a: NetworkType, b: NetworkType) -> Bool {
return a.rawValue < b.rawValue
}
}
I can use this as:
if NetworkType.two_g < NetworkType.three_g {
print("low network")
}
But for sending to server, I have to convert it to String and vice a versa.
So I added one more extension as:
extension NetworkType {
static var networkDict: [String: NetworkType] = ["gprs": .gprs,
"2g": .two_g,
"3g": .three_g,
"4g": .four_g,
"lte": .lte,
"wifi": .wifi];
init(rawString: String) {
let loweredStr = rawString.lowercased()
self = NetworkType.networkDict[loweredStr] ?? .none
}
func rawString() -> String? {
return NetworkType.networkDict.allKeys(forValue: self).first
}
}
//Dictionary extension for 'key for value'
extension Dictionary where Value: Equatable {
func allKeys(forValue val: Value) -> [Key] {
return self.filter { $1 == val }.map { $0.0 }
}
}
let network = NetworkType(rawString: "gprs") //gprs, while receiving from server
let rawString = NetworkType.gprs.rawString() //"gprs", while sending to server
It is working fine, no issues.
Jus curious to know if theres any better way to achieve this.