在 swift 中调用初始化程序错误消息没有完全匹配

tam*_*o42 12 xcode ios swift

我糊涂了。有人能告诉我为什么当我有这个代码时我会收到“调用初始化程序时没有完全匹配”错误....

    let bill = textField.text
    let billTotal = Double(bill)
Run Code Online (Sandbox Code Playgroud)

但是当我强制展开 textField.text 时,错误消失了,一切都很好......

    let bill = textField.text!
    let billTotal = Double(bill)
Run Code Online (Sandbox Code Playgroud)

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

另外,为什么我不能使用可选而不是强制展开?

 let bill = textField.text?
 let billTotal = Double(bill)
Run Code Online (Sandbox Code Playgroud)

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

vad*_*ian 10

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

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

在这种情况下,强制解包很好,因为 a 的text属性UITextField从不,nil尽管它被声明为可选。

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

let billTotal = Double(textField.text!) ?? 0.0
Run Code Online (Sandbox Code Playgroud)

或提供更高级的错误处理

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