1. ホーム
  2. ios

[解決済み] swiftでイニシャライザーの呼び出しに完全一致しないエラーメッセージが表示される

2022-03-02 18:44:47

質問

混乱しています。このコードを実行すると、なぜ "No exact matches in call to initializer" というエラーが発生するのか、どなたか教えてください。

    let bill = textField.text
    let billTotal = Double(bill)

しかし、textField.textを強制的にアンラップすると、エラーはなくなり、すべてがうまくいきます...。

    let bill = textField.text!
    let billTotal = Double(bill)

私の考えでは、強制アンラップしなくても動作するはずですが、textFieldがnilの場合、アプリはクラッシュします。

また、強制アンラップの代わりにオプショナルを使用することはできないのでしょうか?

 let bill = textField.text?
 let billTotal = Double(bill)

オプショナルを使用すると、同じエラーが発生します:"No exact matches in call to initializer"

どうすればいいですか?

エラーが発生する原因 text はオプションで、イニシャライザー・パラメーターは非オプションでなければなりません。

私の考えでは、強制アンラップしなくても動作するはずですが、textFieldがnilの場合、アプリはクラッシュします。

この場合、強制アンラップは text プロパティの UITextField は決して nil はオプションとして宣言されていますが。

しかし、その代わりに、作成された Double に変換できない可能性があるため、入力されたテキストは Double デフォルトの値である

let billTotal = Double(textField.text!) ?? 0.0

または、より高度なエラーハンドリングを提供する

if let billTotal = Double(textField.text!) {
    // do something with billTotal
} else {
    // handle the error
}