首页 > 解决方案 > swift 中调用初始化程序错误消息时没有完全匹配

问题描述

我很困惑。有人可以告诉我为什么当我有此代码时出现“调用初始化程序时没有完全匹配”错误....

    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)

使用可选项会给我同样的错误:“调用初始化程序时没有完全匹配”

标签: iosswiftxcode

解决方案


发生错误是因为text是可选的,并且初始化程序参数必须是非可选的。

我的想法是它应该仍然可以在没有强制展开的情况下工作,但是如果 textField 为 nil,应用程序将会崩溃。

在这种情况下,强制展开很好,因为texta 的属性UITextField永远不会nil,尽管它被声明为可选。

但是您应该检查 createdDouble因为输入的文本可能无法转换为Double,或者使用默认值

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

或提供更高级的错误处理

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

推荐阅读