'init(_:)' is deprecated: replaced by 'init(truncating:)'

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é :