est-il possible d'avoir un éventail d'opérateurs arithmétiques à Swift? Quelque chose comme: Je veux juste générer des chiffres de manière aléatoire, puis choisissez un opérateur arithmétique au départ de la matrice ci-dessus et effectuez l'équation. Par exemple, P> var firstNum = Int(arc4random_uniform(120))
var secondNum = Int(arc4random_uniform(120))
var equation = firstNum + operatorArray[Int(arc4random_uniform(3))] + secondNum //
3 Réponses :
Ce sera - mais vous devez utiliser les opérateurs un peu différemment.
opérateur unique: p> et avec un tableau, vous pouvez utiliser carte code> pour appliquer chacun: p>
Merci. Cela a fonctionné soigneusement. J'ai utilisé les relevés de commutation d'abord (travaillé mais pas très élégant) avant d'obtenir toutes les réponses sur ma question, mais je vais maintenant aller avec votre approche.
Ceci est une approche orientée objet de la mode.
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)
Une approche intéressante (et peut-être plus courte) est utilisée dans la classe de programmation Standford iOS 2014, mais au lieu de classes et d'un protocole, il utilise un énumé, qui sont assez flexibles à Swift.
Merci, je vais y jeter un coup d'oeil.
Vous pouvez utiliser
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))
Ou vous pouvez tirer un script Perl pour faire cela ;-) Je plaisante.
Au lieu de stocker les opérateurs en tant que caractères, car ils sont des fonctions, vous pouvez peut-être les stocker directement, peut-être. Ensuite, vous venez d'exécuter ces fonctions avec les opérandes? Aucune idée si cela fonctionnerait.
Jshier, j'ai essayé de les stocker directement mais cela n'a pas fonctionné. Peut-être que je dois préciser le type ... Je n'ai pas essayé ça.
les stocker comme des fonctions travaillées.