2014-11-03 8 views
11

всего лишь короткий вопрос. В Swift можно решить следующий код:Swift - Разрешение математической операции в строке

var a: String; 
a = "\(3*3)"; 

арифметическая операция в строке будет решена. Но я не могу понять, почему этот следующий вариант не работает.

var a: String; 
var b: String; 

b = "3*3"; 
a = "\(b)"; 

В этом случае арифметическая операция в var a не будет разрешена. Любые идеи, почему и как я могу это работать. Некоторые вещи были бы намного проще, если бы это сработало. Спасибо за ваши ответы.

ответ

1

Это не будет решена, потому что это не арифметическая операция, это строка:

"3*3" 

же, как этот

"String" 

Все, что вы положили в " это строка.

Второй пример позволяет построить новое строковое значение из смеси констант, переменных, литералы и выражения:

"\(3*3)" 

это возможно из-за интерполяции строк \()

Вы вставили строку выражение, которое преобразует качание и создает ожидаемый результат.

23

Во втором случае вы интерполируете строку, а не арифметическое выражение. В вашем примере это строка, которую вы выбрали во время компиляции, но в целом это может быть строка от пользователя или загружена из файла или через Интернет. Другими словами, во время выполнения b может содержать некоторую произвольную строку. Компилятор не доступен во время выполнения для анализа произвольной строки как арифметики.

Если вы хотите оценить произвольную строку как формулу арифметики во время выполнения, вы можете использовать NSExpression. Вот очень простой пример:

let expn = NSExpression(format:"3+3") 
println(expn.expressionValueWithObject(nil, context: nil)) 
// output: 6 

Вы можете также использовать сторонние библиотеки, как DDMathParser.

Смежные вопросы