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.
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é.
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).
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)