Skip to main content
edited title
Link
D4ttatraya
  • 414
  • 6
  • 14

Enum Int-Enum to String and vice a versa in Swift

Source Link
D4ttatraya
  • 414
  • 6
  • 14

Enum to String and vice a versa in Swift

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.