Bonjour à tous
j’ai ce warning que je ne comprends au niveau des astérisques
/// Calcule l’IMC en fonction de la taille: myHeight et le poids: myHeight
/// - Returns: BMI (Double)
func calculateBMI() -> Double {
let formatter = NumberFormatter()
formatter.locale = Locale.current
let myWeightD = formatter.number(from: myWeight) ?? 0
// print(« myWeightD (myWeightD) »)
let myHeightD = formatter.number(from: myHeight) ?? 0
// print(« myHeightD (myHeightD) »)
if myHeightD != 0 {
myBMID = Double(myWeightD) / pow(Double(myHeightD), 2.0) ***
myBMI = String(format: "%.2f", myBMID)
} else {
myBMID = 0
myBMI = String(format: "%.2f", myBMID)
}
return myBMID
}
Quel sont les types de myHeightD
et de myHeightD
?
(Pour que ton code soit correctement formaté dans tes questions, soit tu l’indentes avec 4 espaces sur toutes les lignes, soit tu l’encadres par 3 backticks ```)
Ce sont des doubles
désolé pour le formatage
Si ce sont des Double
pourquoi les castes-tu ?
myBMID = myWeightD / pow(myHeightD, 2)
Ça devrait faire le job.
En faisant Double(monDouble)
tu utilisais un initialiseur qui n’existe pas. Le seul qui existe avec un Double
en paramètre, c’est Double(truncating: monDouble)
mais il ne sert pas à ce que tu cherches à faire.
désolé c’est NSNUMBER
let myHeightD = formatter.number(from: myHeight) ?? 0
Du coup je te conseille ceci :
let myHeightD = formatter.number(from: myHeight)?.doubleValue ?? 0
NSNumber
est un héritage d’Objective-C et n’a que peu d’intérêt ici, essaie de rester au plus près des types de base du Swift quand tu peux.
Merci Letatas
Je n’avais pas vu que cela retournait un NSNumber et non un double
Pas facile à trouver
Quand tu as un doute sur ce genre de question, fais Option+Clic sur ta variable dans Xcode, il te donnera le type qu’il a déterminé :