Add the capability to your CalculatorBrain to allow the input of variables. Do so by
implementing the following API in your CalculatorBrain …func setOperand(variable named: String)This must do exactly what you would imagine it would: it inputs a “variable” as the operand (e.g. setOperand(variable: “x”) would input a variable named x). Setting the operand to x and then performing the operation cos would mean cos(x) is in your CalculatorBrain.
As you might have seen form the previous tasks – the tasks of this assignment are not that easily separable. Let’s start by adding two new types to operation structure. One for operands and one for variables:
private enum Operation { ... case operand(Double) case variable(String) }
And create a stack of those operation to do something with later on:
private var stack = [Operation]()
Finally add the new api method which just puts the variable on the stack:
mutating func setOperand(variable named: String) { stack.append(Operation.variable(named)) }
The change of the structure breaks the switch statement. So for now, a quick fix:
mutating func performOperation(_ symbol: String) { ... default: break // nothing to do for operands and variables } }
The complete code for the assignment #2 task #3 is available on GitHub.