web-dev-qa-db-fra.com

Comment faire l'arithmétique entre int et float dans Swift?

C'est mon premier jour en programmation Swift et jusqu'à présent nous utilisons Objective C. J'ai essayé d'écrire un programme d'addition simple qui fonctionne. Comme,

var i = 10
var j = 10
var k = i + j
println(k)

Mais lorsque je modifie une des valeurs en float, cela donne une erreur. 

var i = 10
var j = 10.4
var k = i + j
println(k)

Erreur: main.Swift: 13: 11: Impossible de trouver une surcharge pour '+' qui accepte les arguments fournis

Maintenant, j'ai fait une recherche Google et essayé peu de choses, par exemple. Double(i+j), mais cela ne fonctionne pas. Swift devrait implicitement convertir int en float dans ce cas, n'est-ce pas? 

S'il vous plaît suggérez si je fais une erreur en comprenant la langue Swift. 

13
Pranit Kothari

Selon ce que vous voulez que votre résultat soit, vous devez le convertir en un type approprié en utilisant la méthode init de ce type.

par exemple.

var myInt = 5;
var myDouble = 3.4;

Si je veux un double par exemple dans mon résultat

var doubleResult = Double(myInt) + myDouble;

si je veux plutôt un entier, veuillez noter que le double sera tronqué.

var intResult = myInt + Int(myDouble)

Le problème que je vois dans votre exemple est que vous essayez d'effectuer une opération d'ajout puis de la convertir, mais que les deux valeurs doivent être identiques avant d'effectuer l'ajout.

Apple a rendu la règle stricte pour éviter les erreurs de correspondance et les erreurs de conversion. Parfois cela peut être un peu "trop ​​strict" pour les développeurs venant d'autres langues, j'étais ennuyé au début mais je m'y suis habitué.

24
TheLazyChap

Vous pouvez définir votre propre opérateur ...

// Put this at file level anywhere in your project
operator infix + { }
@infix func + (a: Int, b: Double) -> Double {
    return Double(a) + b
}
@infix func + (a: Double, b: Int) -> Double {
    return Double(b) + a
}

let i = 10
let j = 10.4
let k = i + j // 20.4

... mais je sens que cela va à l’encontre de l’esprit de la langue (et comme le dit @TheLazyChap, cela dépend de ce que vous voulez, ce qui peut ne pas toujours être le même).

5
Grimxn

essaye ça:

 var i = 10  //Int Type
 var j = 10.4  //Double Type
 var k = Double(i) + j //result is now Double Type
 println(k)
0
MarcS