Калькуляторная программа - PullRequest
0 голосов
/ 20 июня 2019

Код оценивает значение математического выражения в переменной, хранящейся в строке. Код работает, но я столкнулся с ошибкой, которая заставила меня задуматься, почему.

Без ! приведенный ниже код выдает предупреждение об ошибке, говорящее о том, что дополнительный 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 голосов
/ 20 июня 2019

Int(String) возвращает необязательный Int , поскольку не каждая строка может быть преобразована в целое число. Помещая восклицательный знак в конце, вы говорите: «выведите исключение, если вы не можете преобразовать мой ввод в целое число»

Вот хорошая статья о «Дополнительных» в Swift: https://hackernoon.com/swift-optionals-explained-simply-e109a4297298

0 голосов
/ 20 июня 2019

Оператор ! заставляет Int(myString) до развернуть .

Полагаю, вы новичок в Swift и должны прочитать немного о Необязательно в Swift. Вот ссылка для вас, чтобы понять больше об этом:

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")! (вернет ноль), программа вылетит

...