Conjunto de operadores aritméticos en Swift

¿Es posible tener una matriz de operadores aritméticos en Swift? Algo como:

var operatorArray = ['+', '-', '*', '/'] // or =[+, -, *, /] ? 

Solo quiero generar numbers random y luego elegir aleatoriamente un operador aritmético de la matriz de arriba y ejecutar la ecuación. Por ejemplo,

 var firstNum = Int(arc4random_uniform(120)) var secondNum = Int(arc4random_uniform(120)) var equation = firstNum + operatorArray[Int(arc4random_uniform(3))] + secondNum // 

¿Funcionará la ecuación anterior?

Gracias.

Lo hará, pero debe usar los operadores un poco diferente.

Solo operador:

 // declare a variable that holds a function let op: (Int,Int)->Int = (+) // run the function on two arguments op(10,10) 

Y con una matriz, puede usar el map para aplicar cada uno:

 // operatorArray is an array of functions that take two ints and return an int let operatorArray: [(Int,Int)->Int] = [(+), (-), (*), (/)] // apply each operator to two numbers let result = map(operatorArray) { op in op(10,10) } // result is [20, 0, 100, 1] 

Puede usar la class NSExpression para hacer lo mismo.

 var operatorArray = ["+", "-", "*", "/"] var firstNum = Int(arc4random_uniform(120)) var secondNum = Int(arc4random_uniform(120)) var equation = "\(firstNum) \(operatorArray[Int(arc4random_uniform(3))]) \(secondNum)" var exp = NSExpression(format: equation, argumentArray: []) println(exp.expressionValueWithObject(nil, context: nil)) 

Este es un enfoque orientado a objects antiguo.

 protocol Operation { func calculate(op1:Int, op2:Int) -> Int } class Addition : Operation { func calculate(op1: Int, op2: Int) -> Int { return op1 + op2 } } class Subtraction : Operation { func calculate(op1: Int, op2: Int) -> Int { return op1 - op2 } } class Multiplication : Operation { func calculate(op1: Int, op2: Int) -> Int { return op1 * op2 } } class Division : Operation { func calculate(op1: Int, op2: Int) -> Int { return op1 / op2 } } var operatorArray : [Operation] = [Addition(), Subtraction(), Multiplication(), Division()] var firstNum = Int(arc4random_uniform(120)) var secondNum = Int(arc4random_uniform(120)) var equation = operatorArray[Int(arc4random_uniform(3))].calculate(firstNum, op2: secondNum)