代码在存储在字符串中的变量中评估数学表达式的值。该代码有效,但是遇到一个错误,使我想知道为什么。
在没有!
的情况下,以下代码会发出错误警告,指出未包装可选的Int。
let operands : [Int] = [Int(split_exp[0])!, Int(split_exp[2])!]
注意:该行是第三行
为什么没有!
时会发生此错误?
// string calculator app. x = multiplication
let expression = "2 x 2"
let split_exp = expression.components(separatedBy: " ")
let operands : [Int] = [Int(split_exp[0])!, Int(split_exp[2])!]
let operation = split_exp[1] // get the operands and the operation
switch operation {
case "+":
print("\(operands[0]) + \(operands[1]) = \(operands.reduce(0, +))")
case "x":
print("\(operands[0]) x \(operands[1]) = \(operands.reduce(1, *))")
default:
print("No answer ")
}
答案 0 :(得分:0)
!
运算符将Int(myString)
强制为 unwrapp 。
我想您是Swift的新手,应该阅读一下Swift中的 Optionals 。这是一个链接,供您详细了解:
https://medium.com/@agoiabeladeyemi/optionals-in-swift-2b141f12f870
总而言之,可选值是一个可能为nil
的值(如果您来自另一种语言,则也称为null
)。这是一种包装值的方法,您不确定该值是否已定义。
在您的示例中,通过String
将Int
投射到Int( String )
会返回nil
例如:
Int("5")
返回5
Int("r")
返回nil
通过在命令末尾添加!
,您基本上对程序说:“我100%确保该强制转换不会失败,并返回Int
”。当您确定可选值不会为零时,这是一种避免处理可选值的方法。
请不要担心如果失败,例如Int("q")!
(将返回nil),则程序崩溃
答案 1 :(得分:0)
Int(String)
returns an optional Int,因为并非每个字符串都可以转换为整数。通过将感叹号放在最后,您说“如果无法将我的输入转换为整数,则会引发异常”
这是一篇关于Swift中“可选”的好文章:https://hackernoon.com/swift-optionals-explained-simply-e109a4297298