计算器程序

时间:2019-06-20 00:59:28

标签: arrays swift optional

代码在存储在字符串中的变量中评估数学表达式的值。该代码有效,但是遇到一个错误,使我想知道为什么。

在没有!的情况下,以下代码会发出错误警告,指出未包装可选的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 ")
}

2 个答案:

答案 0 :(得分:0)

!运算符将Int(myString)强制为 unwrapp

我想您是Swift的新手,应该阅读一下Swift中的 Optionals 。这是一个链接,供您详细了解:

https://medium.com/@agoiabeladeyemi/optionals-in-swift-2b141f12f870


总而言之,可选值是一个可能为nil的值(如果您来自另一种语言,则也称为null)。这是一种包装值的方法,您不确定该值是否已定义。

在您的示例中,通过StringInt投射到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