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

前端 未结 2 540
不知归路
不知归路 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)
    
    0 讨论(0)
  • 2020-12-18 07:05

    It isn't actually needed in that case. You could just use optionalName in the if. But if optionalName was a calculated property it would have to be calculated in the conditional then again in the body. Assigning it to name just makes sure it is only calculated once.

    0 讨论(0)
提交回复
热议问题