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 и создает ожидаемый результат.