我遇到了一个简单的计算器应用程序的这些代码行。

func processOperation (operation: Operation) {
    if currentOperation != Operation.Empty {
        if runningNumber != "" {
            rightValStr = runningNumber
            runningNumber = ""

            if currentOperation == Operation.Multiply {
                result = "\(Double(leftValStr)! * Double(rightValStr)!)"
            } else if currentOperation == Operation.Divide {
                result = "\(Double(leftValStr)! / Double(rightValStr)!)"
            } else if currentOperation == Operation.Subtract {
                result = "\(Double(leftValStr)! - Double(rightValStr)!)"
            } else if currentOperation == Operation.Add {
                result = "\(Double(leftValStr)! + Double(rightValStr)!)"
            }


leftValStr声明为var leftValStr = ""

rightValStr也声明为var rightValStr =""

我想知道使用“!”的目的是什么? \(Double(leftValStr)! / Double(rightValStr)!)中的目的是什么?
据我所知,“!”用于展开可选。这里的leftValStr和rightValStr没有声明为Optional,为什么我们必须拆开它们?

最佳答案

即使leftValStrrightValStr不是可选的,也要强制展开Double(leftValStr)Double(rightValStr),并且使用String值初始化Double的结果可能是nil

例如,您不能使用stackoverflow字符串初始化Double。

如果要确保此转换结果正确,可以使用if let避免强制展开,例如:

if let leftValDouble = Double(leftValStr) {
    // do your code
} else {
    // handle error
}


请记住,如果强行打开nil值,则代码将崩溃。

10-07 14:33