web-dev-qa-db-fra.com

Impossible d'appeler l'initialiseur pour le type 'Double' avec une liste d'arguments de type '(String?)'

J'ai deux problèmes:

let amount:String? = amountTF.text
  1. amount?.characters.count <= 0

C'est donner une erreur:

Binary operator '<=' cannot be applied to operands of type 'String.CharacterView.IndexDistance?' (aka 'Optional<Int>') and 'In
  1. let am = Double(amount)

C'est donner une erreur:

Cannot invoke initializer for type 'Double' with an argument list of type '(String?)'

Je ne sais pas comment résoudre ça.

9
david

amount?.count <= 0 Ici le montant est optionnel. Vous devez vous assurer que ce n'est pas nil.

let amount:String? = amountTF.text
if let amountValue = amount, amountValue.count <= 0 {

}

amountValue.count <= 0 Ne sera appelé que si amount n'est pas nul.

Même problème pour cette let am = Double(amount). amount est facultatif.

if let amountValue = amount, let am = Double(amountValue) {
       // am  
}
14
Bilal

Votre chaîne est facultative car elle avait un "?", Cela signifie qu'elle pourrait être nulle, cela signifie que d'autres méthodes ne fonctionneraient pas. Vous devez vous assurer que ce montant facultatif existe, puis utilisez-le:

VOIE 1:

// If amount is not nil, you can use it inside this if block.

if let amount = amount as? String {

    let am = Double(amount)
}

VOIE 2:

// If amount is nil, compiler won't go further from this point.

guard let amount = amount as? String else { return }

let am = Double(amount)
8
asanli