Auto unwrapping of Optionals when let is used with if and guard

Attended a workshop on “Introduction to iOS Development with Swift 4” last year on 07 Oct 2017. Got a better idea of Optionals and penned down some notes in a GitHub gist. Thought it would be better to put them in a blog post to make it more accessible 🙂

The gist of it is that, the variable s in let s = optionalString will be automatically unwrapped when used with if and guard.

var possibleString: String?
possibleString = "Hello"

/* if - without unwrap */
let s = possibleString
if (s != nil) {
    print(s) // Optional("Hello")
}

/* if - with unwrap */
if let s = possibleString {
    print(s) // "Hello"
}

/* guard - without unwrap */
func check(optionalString: String?) {
    let s = optionalString
    guard (s != nil) else {
        print("nil value")
        return
    }

    // Warning: Expression implicitly coerced from 'String?' to Any
    print(s) // Optional("Hello")
}

/* guard - with unwrap */
func checkAndUnwrapped(optionalString: String?) { 
    guard let s = optionalString else {
        print("nil value")
        return
    }

    print(s) // "Hello"
}