When you assign raw values to enum, you have to define the type in your enum syntax and give value for each case:
enum IntEnum: Int{
case case1 = 50
case case2 = 60
case case3 = 100
}
Swift gives you flexibility while dealing with raw values. You don't have to explicitly assign a raw value for each case in enums if the type of enum is Int or String. For Int type enums, the default value of enum is equal to the value of previous one + 1. In case of the first case, by default it's equal to 0. Let's take a look at this example:
enum Gender: Int{
case Male
case Female
case Other
}
var maleValue = Gender.Male.rawValue // 0
var femaleValue = Gender.Female.rawValue // 1
We didn't set any raw value for any case, so the compiler automatically will set the first one to 0, as it's a no set. For any following case, it's value will be equal to previous case value + 1. Another note is that .rawValue returns the explicit value of the enum case. Let's take a look at another complex example that will make it crystal clear:
enum HTTPCode: Int{
case OK = 200
case Created // 201
case Accepted // 202
case BadRequest = 400
case UnAuthorized
case PaymentRequired
case Forbidden
}
let pageNotFound = HTTPCode.NotFound
let errorCode = pageNotFound.rawValue // 404
We have explicitly set the value of first case to 200; so, the following two cases will be set to 201 and 202, as we didn't set raw values for them. The same will happen for BadRequest case and the following cases. For example, the NotFound case is equal to 404 after incrementing cases.
Now, we see how Swift compiler deals with Int type when you don't give explicit raw values for some cases. In case of String, it's pretty easier. The default value of String enum cases will be the case name itself. Let's take a look at an example:
enum Season: String{
case Winter
case Spring
case Summer
case Autumn
}
let winter = Season.Winter
let statement = "My preferred season is " + winter.rawValue // "My preferred season is Winter"
You can see that we could use the string value of rawValue of seasons to append it to another string.