Why would I use if and let together, instead of just checking if the original variable is nil? (Swift)

前端 未结 2 542
不知归路
不知归路 2020-12-18 06:45

In “The Swift Programming Language.” book, Apple mentions using if and let together when accessing an optional variable.

The book gives the

2条回答
  •  小蘑菇
    小蘑菇 (楼主)
    2020-12-18 06:52

    Because it also unwraps the optional value, so this code:

    if let name = optionalName {
        greeting = "Hello, \(name)"
    }
    

    is equivalent to:

    if optionalName != nil {
        let name:String = optionalName!
        greeting = "Hello, \(name)"
    }
    

    This language sugar is known as Optional Binding in Swift.

    Optional Types

    In Swift T and T? are not the same types, but the underlying value of an optional T? type can easily be realized by using the ! postfix operator, e.g:

    let name:String = optionalName!
    

    Which now can be used where a String is expected, e.g:

    func greet(name:String) -> String {
        return "Hello, \(name)"
    }
    
    greet(name)
    

    Although as its safe to do so, Swift does let you implicitly cast to an optional type:

    let name = "World"
    let optionalName: String? = name
    
    func greet(optionalName:String?) -> String? {
        if optionalName != nil {
            return "Hello, \(optionalName)"
        }
        return nil
    }
    
    //Can call with either String or String?
    greet(optionalName)
    greet(name)
    

提交回复
热议问题