web-dev-qa-db-ja.com

タイプ '(String?)'の引数リストでタイプ 'Double'の初期化子を呼び出すことはできません

2つの問題があります。

_let amount:String? = amountTF.text
_
  1. _amount?.characters.count <= 0_

エラーが発生しています:

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

エラーが発生しています:

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

これを解決する方法がわかりません。

9
david

_amount?.count <= 0_ここでの量はオプションです。 nilではないことを確認する必要があります。

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

}
_

_amountValue.count <= 0_は、amountがnilでない場合にのみ呼び出されます。

このlet am = Double(amount)についても同じ問題。 amountはオプションです。

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

あなたの文字列は '? "を持っているのでオプションです。nilになる可能性があり、それ以上のメソッドは機能しないことを意味します。オプションの量が存在することを確認してから使用する必要があります:

方法1:

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

if let amount = amount as? String {

    let am = Double(amount)
}

方法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