Swift - Разрешение математической операции в строке
просто короткий вопрос. В Swift можно решить следующий код:
var a: String;
a = "\(3*3)";
Арифметическая операция в строке будет решена. Но я не могу понять, почему этот следующий вариант не работает.
var a: String;
var b: String;
b = "3*3";
a = "\(b)";
В этом случае арифметическая операция в var a не будет разрешена. Любые идеи, почему и как я могу это работать. Некоторые вещи были бы намного проще, если бы это сработало. Спасибо за ваши ответы.
Ответы
Ответ 1
Во втором случае вы интерполируете строку, а не арифметическое выражение. В вашем примере это строка, которую вы выбрали во время компиляции, но в целом это может быть строка от пользователя или загружена из файла или через Интернет. Другими словами, во время выполнения b
может содержаться некоторая произвольная строка. Компилятор не доступен во время выполнения для разбора произвольной строки в виде арифметики.
Если вы хотите оценить произвольную строку как арифметическую формулу во время выполнения, вы можете использовать NSExpression
. Вот очень простой пример:
let expn = NSExpression(format:"3+3")
println(expn.expressionValueWithObject(nil, context: nil))
// output: 6
Вы также можете использовать стороннюю библиотеку, например DDMathParser
.
Ответ 2
Это не будет решено, потому что это не арифметическая операция, это строка:
"3*3"
то же, что и этот
"String"
Все, что вы введете "
в строку.
Второй пример позволяет построить новое значение String из сочетания констант, переменных, литералов и выражений:
"\(3*3)"
это возможно из-за интерполяции строк \()
Вы вставили строковое выражение, которое преобразует swing и создает ожидаемый результат.