Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

Tags:

int

xcode

ios

swift

I have two issues:

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

It's giving error :

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

It's giving error:

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

I don't know how to solve this.

like image 214
david Avatar asked Oct 28 '17 11:10

david


2 Answers

amount?.count <= 0 here amount is optional. You have to make sure it not nil.

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

}

amountValue.count <= 0 will only be called if amount is not nil.

Same issue for this let am = Double(amount). amount is optional.

if let amountValue = amount, let am = Double(amountValue) {
       // am  
}
like image 161
Bilal Avatar answered Oct 19 '22 18:10

Bilal


Your string is optional because it had a '?", means it could be nil, means further methods would not work. You have to make sure that optional amount exists then use it:

WAY 1:

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

if let amount = amount as? String {

    let am = Double(amount)
}

WAY 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)
like image 33
asanli Avatar answered Oct 19 '22 20:10

asanli