2014-11-03 16 views
11

solo una breve domanda. Swift è possibile risolvere il codice seguente:Swift - Risoluzione di un'operazione matematica in una stringa

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

L'operazione aritmetica nella stringa sarà risolto. Ma non riesco a capire, perché questa seguente variazione non funziona.

var a: String; 
var b: String; 

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

In questo caso l'operazione aritmetica in var a non verrà risolta. Qualche idea per cui e come posso farlo funzionare. Alcune cose sarebbero molto più semplici se funzionasse. Grazie per le tue risposte.

risposta

1

Questo non sarà risolto, perché non si tratta di un'operazione aritmetica, questa è una stringa:

"3*3" 

lo stesso di questo

"String" 

Tutto ciò che si mette in " è una stringa.

Il secondo esempio consente di costruire un nuovo valore stringa da un mix di costanti, variabili, letterali, e le espressioni:

"\(3*3)" 

questo è possibile a causa di interpolazione stringa \()

È inserito una stringa espressione che si converte e crea risultati attesi.

23

Nel secondo caso, si interpola una stringa, non un'espressione aritmetica. Nel tuo esempio, è una stringa che hai scelto in fase di compilazione, ma in generale potrebbe essere una stringa da parte dell'utente o caricata da un file o sul web. In altre parole, in fase di esecuzione b potrebbe contenere una stringa arbitraria. Il compilatore non è disponibile in runtime per analizzare una stringa arbitraria come aritmetica.

Se si desidera valutare una stringa arbitraria come una formula aritmetica in fase di esecuzione, è possibile utilizzare NSExpression. Ecco un esempio molto semplice:

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

È inoltre possibile utilizzare una libreria di terze parti come DDMathParser.

Problemi correlati