我遇到了一些简单的计算器应用程序代码。
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,为什么我们要打开它们呢?
答案 0 :(得分:0)
即使leftValStr
和rightValStr
不是选项,您也需要展开{{1}}和Double(leftValStr)
以及初始化 Double 的结果字符串值可以是Double(rightValStr)
。
例如,您无法使用nil
字符串初始化Double。
如果您想确保此转换结果正确,可以使用stackoverflow
来避免强制解包,例如:
if let
请记住,如果您强行打开if let leftValDouble = Double(leftValStr) {
// do your code
} else {
// handle error
}
值,您的代码就会崩溃。
答案 1 :(得分:0)
您使用的Double
初始值设定项是failable
初始值设定项,即可能会创建Double
或返回nil
。
示例强>,
加倍(" 3"),这里" 3"可以转换为Double
,因此它返回一个对应于3的可选Double
值。
Double(" abc"),这里" abc"无法转换为Double
,因此在这种情况下会返回nil
。
在您的代码中,您使用的是&#(""),它也无法转换为Double
,因此会返回nil
。
现在,当您force unwrap
nil
时,它将导致运行时异常。
因此,Double(leftValStr)!
会导致运行时异常。
尝试使用!访问不存在的可选值会触发a 运行时错误。始终确保可选项包含非零值 使用前的价值!强行解开它的价值。