enumeration - Swift issue with example -


i'm new swift , learning book called the swift programming language. in book there example:

enum rank: int { case ace = 1 case two, three, four, five, six, seven, eight, nine, ten case jack, queen, king func simpledescription() -> string {     switch self {     case .ace:         return "ace"     case .jack:         return "jack"     case .queen:         return "queen"     case .king:         return "king"     default:         return string(self.rawvalue)     } } } 

and here part don't understand:

if let convertrank = rank(rawvalue: 3){     let description = convertrank.simpledescription() } 

i tried change code above this:

let convertrank = rank(rawvalue: 3) let description = convertrank.simpledescription() 

basically, have removed if statement, error occurs: value of optional 'rank?' not unwrapped; did mean use '!' or '?'?

why have use if statement? , don't understand error message say.

if let special structure in swift allows check if optional holds value, , in case – unwrapped value.

in case:

if let convertrank = rank(rawvalue: 3){     let description = convertrank.simpledescription() } 

the if let structure unwraps rank(rawvalue: 3) (i.e. checks if there’s value stored , takes value) , stores value in convertrank constant. can use convertrank inside first branch of if. notice inside if don’t need use ? or ! anymore.

in second case:

let convertrank = rank(rawvalue: 3) let description = convertrank.simpledescription() 

you can unwrap convertrank way:

let description = convertrank!.simpledescription() 

trying use ! access non-existent optional value triggers runtime error. make sure optional contains non-nil value before using ! force-unwrap value.

but below code work same if let:

let description = convertrank?.simpledescription() 

and program not crash if convertrank nil.


more explanation:


Comments

Popular posts from this blog

c# - Binding a comma separated list to a List<int> in asp.net web api -

Delphi 7 and decode UTF-8 base64 -

html - Is there any way to exclude a single element from the style? (Bootstrap) -